LINQ 在运行期间定义查询表达式时、查询就不会运行。查询会在迭代数据项是运行,例如:
static void Main(string[] args) { List<string> list = new List<string>(); for (int i = 0; i < 9; i++) { list.Add(i.ToString()); } var ls = from item in list where item.StartsWith("1") select item; Console.WriteLine("第一次输出:"); foreach (var item in ls) { Console.WriteLine(item); } Console.WriteLine(); for (int i = 0; i < 10; i++) { list.Add(i.ToString()); } Console.WriteLine("第二次输出:"); foreach (var item in ls) { Console.WriteLine(item); } Console.Read(); }
输出:
同时还必须注意,每次在迭代中使用查询时,都会调用扩展方法。在大多数情况下,这是非常有效的,
因为我们可以检测出源数据中的变化。但是在一些情况下,这是不可行的。调用扩展方法ToArray(),ToList()等
可以改变这个操作
static void Main(string[] args) { List<string> list = new List<string>(); for (int i = 0; i < 9; i++) { list.Add(i.ToString()); } var ls = (from item in list where item.StartsWith("1") select item).ToList(); Console.WriteLine("第一次输出:"); foreach (var item in ls) { Console.WriteLine(item); } Console.WriteLine(); for (int i = 0; i < 10; i++) { list.Add(i.ToString()); } Console.WriteLine("第二次输出:"); foreach (var item in ls) { Console.WriteLine(item); } Console.Read(); }