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