LINQ 推迟查询的执行

 

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();
        }

 

posted on 2017-12-20 16:37  weicanpeng  阅读(173)  评论(0编辑  收藏  举报

导航