Вернуть анонимный тип внутри метода Where

1

Я знаю, что для возврата анонимного типа я могу это сделать:

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?

Спасибо!

  • 4
    Where(x => x.SomeField > 200).Select(x => new { SF = x.SomeField, AF = x.AnotherField});
  • 0
    Возвращаете анонимный тип? Не уверен, что это лучшая идея. Как вы планируете получить доступ к нему на вызывающей стороне? dynamic ?
Теги:
linq

1 ответ

7
Лучший ответ

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 для получения всех элементов, соответствующих вашему предикату.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню