Я знаю, что для возврата анонимного типа я могу это сделать:
var test = from c in list
where c.SomeField > 200
select new { c.SomeField, c.AnotherField };
И это нормально.
Теперь я хотел бы теперь, как вернуть этот анонимный тип, делая то же самое, но используя метод Where. Что-то вроде:
var test = list.Where((SomeType c) => { if (c.SomeField > 200)
return new { c.SomeField, c.AnotherField } });
Есть ли способ сделать это с помощью метода Where?
Спасибо!
Where
не предназначено для этого. Where
ожидает делегат, который берет объект и возвращает bool
. Таким образом, возвращение анонимного типа в " Where
невозможно" и не имеет смысла.
Вы можете фильтровать свои объекты только с помощью Where
а затем делать проекцию с помощью Select
var test = list.Where(c=> c.SomeField > 200)
.Select(c => new { c.SomeField, c.AnotherField });
Btw это равнозначно вашему первому запросу, поскольку оно будет переведено на это.
Кроме того, если вы работаете с List<T>
, вы можете использовать метод List<T>.FindAll
для получения всех элементов, соответствующих вашему предикату.
Where(x => x.SomeField > 200).Select(x => new { SF = x.SomeField, AF = x.AnotherField});
dynamic
?