我的code是:
using System;
using System.Linq;
using System.Collections.Generic;
public class D {
public string Value { get; set; }
public D(string v) { this.Value = v; }
}
public class Program
{
public static void Main()
{
List<D> DD = new List<D>();
DD.Add(new D("2018-11-08"));
DD.Add(new D("2018-12-01"));
var dd = DD.Where(d=> {
Console.WriteLine($"In predicate: {d.Value}");
return d.Value=="2018-12-01";
});
var dl = dd.ToList();
foreach (var d in dl) {
Console.WriteLine($"Final: {d.Value}");
}
}
}
输出为:
In predicate: 2018-11-08
In predicate: 2018-12-01
Final: 2018-12-01
如果DD
包含一百万个元素,DD.Where
中的lambda是否执行一百万次?
如果DD
是SQL Server中的表怎么办?
答案 0 :(得分:6)
如果DD包含一百万个元素,则DD中的lambda将在哪里执行 一百万次?
答案取决于急切的操作。在这种特定情况下,是,因为渴望的操作是ToList
,但是说它是First()
,Any()
,一旦找到一个符合条件。
答案 1 :(得分:0)
查询语法,基本上在其中创建方法和委托,并使用它来调用方法语法版本。无论您在哪里调用with都将变成单个方法,然后通过委托对源序列的每个元素进行调用,直到找到结果为止。
因此,可能发生的事情就是将一个检查作为一个整体表达式传递出去。
Where ( d.Value=="2018-12-01")
It will turn into a single method call like this
bool FindValueExample(var d){
return (d.Value=="2018-12-01");
}
,然后在每个元素上调用。