Linq链接了SELECT和DISTINCT运算符

时间:2014-04-06 11:56:37

标签: c# linq

我是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进行多次迭代?

由于

维卡斯

1 个答案:

答案 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();