在Where方法中返回匿名类型

时间:2014-07-25 20:21:09

标签: c# .net linq

我知道要返回一个匿名类型,我可以这样做:

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方法?

谢谢!

1 个答案:

答案 0 :(得分:7)

Where不适用于此。 Where期望代理人获取对象并返回bool。因此,在Where中返回匿名类型是不可能的,也没有意义。

您只能使用Where过滤商品,然后使用Select进行投影

var test = list.Where(c=> c.SomeField > 200)
               .Select(c => new { c.SomeField, c.AnotherField });

顺便说一句,这是你的第一个查询的等同,因为它将被翻译成这个。


或者,如果您使用的是List<T>,则可以使用List<T>.FindAll方法获取与谓词匹配的所有项目。