如何在用作查找时限制EF已生成的属性数

时间:2010-12-07 04:26:13

标签: .net entity-framework

如果我只想从Customer实体集合中返回ID和Name,那么推荐的方法是什么?我应该使用实体集,然后在循环收集时选择我需要的东西吗?是否有LINQ语法可以给我相当于SQL Select子句(即选择ID,来自客户的名称)。

谢谢你, 斯蒂芬

1 个答案:

答案 0 :(得分:4)

使用Queryable.Select<TSource, TResult>来投射集合:

var customers = ctx
   .Customers
   .Where(x => x.FirstName == "Joe")
   .Select(x => new { ID = x.CustomerId, Name = x.CustomerName })
   .ToList();

请注意,它会将结果投影到List<T>个匿名类型。

如果您想将其投影到其他内容(例如自定义类/ POCO),您需要将结果集首先,然后然后投影查询(例如.ToList()然后.Select())。

换句话说,如果你这样做:

var customers = ctx
       .Customers
       .Where(x => x.FirstName == "Joe")
       .Select(x => new CutDownCustomer { ID = x.CustomerId, Name = x.CustomerName })
       .ToList(); // fire query

您将收到EF错误(无法转换为Linq-Entities查询 - 因为“CutDownCustomer”不是概念模型的一部分)。

所以你必须这样做:

var customers = ctx
       .Customers
       .Where(x => x.FirstName == "Joe")
       .ToList() // fire query
       .Select(x => new CutDownCustomer { ID = x.CustomerId, Name = x.CustomerName });

当然,如果您只需要结果集的方法范围,那么匿名类型就足够了。

HTH。