我是LINQ的新手并且有一个基本的查询。
假设我有一个庞大的客户对象列表
List<Customer> c = null;
c = //Fetch from DB - resulting into 1000+ non-unique Customers;
如果我将列表转换为另一个类的列表 - 由于缺少更好的名称 - CustomerEntity然后选择不同的类如下:
var ce = c.Select(cust => new CustomerEntity()
{
CustomerID = cust.CustID,
CustomerName = cust.CustName
}).Distinct(new CustomerEntityComparer()).ToList();
CustomerEntityComparer只是一个基于CustomerID比较2个CustomerEntity对象的类。 我的查询是: 如果Select和Distinct被链接,那么是否会导致对List进行多次迭代?
由于
维卡斯
答案 0 :(得分:1)
提供更详细的答案:
您可以注意到Select()返回IEnumerable,Distinct()也是如此。那是因为你基本上是在创建一个查询。在调用ToList()方法之前,不会进行任何选择或不同的过滤。执行ToList()方法时,将评估整个查询。这叫做延期执行。
这样做的好处是您可以创建如下的查询:
var ceQuery = c.Select(cust => new CustomerEntity()
{
CustomerID = cust.CustID,
CustomerName = cust.CustName
}).Distinct(new CustomerEntityComparer());
然后每当“c”发生变化时,您可以重新使用相同的ceQuery来获取最新的结果:
var ce = ceQuery.ToList();