C# LINQ

[ C# 3.0/.NET 3.x 新增特性 ]

2.1 初识LINQ:类似SQL风格的代码

  LINQ又称语言集成查询,它是C# 3.0的新语法。在更多的人看来,它是一种方便的查询表达式,或者说是和SQL风格接近的代码

    var maleList = from p in personList
                   where p.Gender == true
                   select p;

 

  (1)LINQ表达式以"from"开始,以"select 或 group by子句"结尾;

  (2)LINQ表达式的输出是一个 IEnumerable<T> 或 IQueryable<T> 集合;(注:T 的类型 由 select 或 group by 推断出来)

2.2 LINQ使用:实现除Skip和Take外的标准查询运算符的功能

  (1)基本条件查询:

            List<Person> personList = GetPersonList();
            List<Children> childList = GetChildrenList();
            // 基本条件查询
            Console.WriteLine("Basic Query:");
            var maleList = from p in personList
                           where p.Gender == true
                           select p;
            maleList.ToList().ForEach(m =>
                Console.WriteLine(m.ToString()));

 

 

  (2)排序条件查询:

            // 排序条件查询
            Console.WriteLine("Order Query:");
            var orderedList = from p in personList
                              orderby p.Age descending
                              orderby p.Name ascending
                              select p;
            orderedList.ToList().ForEach(m =>
                Console.WriteLine(m.ToString()));

 

  (3)连接查询:

            // Join连接查询
            Console.WriteLine("Join Query:");
            var joinedList = from p in personList
                             join c in childList
                             on p.ID equals c.ParentID
                             select new
                             {
                                 Person = p,
                                 Child = c
                             };
            foreach (var item in joinedList)
            {
                Console.WriteLine(item.ToString());
            }

 

  (4)分组查询:

            // 分组条件查询
            Console.WriteLine("Group Query:");
            var groupList = from p in personList
                            group p by p.Gender;
            foreach (var group in groupList)
            {
                Console.WriteLine("Group:{0}", 
                    group.Key? "":"");
                foreach(var item in group)
                {
                    Console.WriteLine(item.ToString());
                }
            }

 

  运行结果请参考上一节标准查询运算符中相关的运行结果,或下载附件运行查看,这里不再贴图。

2.3 LINQ本质:生成对应的标准查询运算符

  作为一个细心的.Net码农,我们不由得对LINQ表达式为我们做了哪些工作而好奇?于是,我们又想起了我们的“滑板鞋”—Reflector或ILSpy,去看看编译器为我们做了什么事!

  (1)以上述的基本条件查询代码为例,我们看到原来编译器将LINQ生成了对应的标准查询运算符,即Where扩展方法:

  (2)再来看看排序条件查询的代码,也是生成了对应的标准查询运算符,即OrderBy扩展方法:

  (3)总结:LINQ编译后会生成对应的标准查询运算符(查询->Where,排序->OrderBy,连接->Join,分组->GroupBy),所以LINQ表达式其实就是类似于SQL风格的一种更加友好语法糖而已。其本质还是扩展方法、泛型委托等“旧酒”,被一个“新瓶子”所包装了起来,就变得高大上了。

 

 

 出处:http://edisonchou.cnblogs.com

posted @ 2020-05-29 11:53  delafqm  阅读(100)  评论(0编辑  收藏  举报