一、标准的查询操作符

标准查询操作符 说明

Where

OfType<TResult>

筛选操作符定义了返回元素的条件。

Select

SelectMany

投射操作符用于把对象转换为另一个类型的新对象。

OrderBy

ThenBy

OrderByDescending

ThenByDescending

Reverse

排序操作符改变所返回的元素的顺序。OrderBy升序,OrderByDescending降序。如果第一次排序的结果很类型,可以使用ThenBy和ThenBy Descending操作符进行第二次排序,Reverse翻转集合中元素的顺序。

Join

GroupJoin

连接操作符用于合并不直接相关的集合。Join操作符根据键选择器关联两个集合。GroupJoin操作符连接两个集合,组合其结果。

GroupBy

ToLookup

组合操作符把数据分组。GroupBy操作符组合有公共键的元素。ToLookup通过创建一个一对多字典,来组合元素。

Any

All

Contains

如果元素序列满足指定的条件,限定符操作符就返回布尔值。Any确定集合中是否有满足谓词函数的元素;All确定集合中的所有元素是否都满足谓词函数;Contains检查某个元素是否存在集合中。

Take

Skip

TakeWhile

SkipWhile

分区操作符返回集合的一个子集。使用Take必须指定要从集合中提取的元素个数;Skip跳过指定的元素个数;TakeWhile提取条件为真的元素;SkipWhile跳过条件为真的元素。

Distinct

Union

Intersect

Except

Zip

Set操作符返回一个集合。Distinct从集合中删除重复的元素;Union返回出现在其中一个集合中的唯一元素;Intersect返回两个集合中都有的元素;Except返回只出现在一个集合中的元素;Zip把两个集合合并成一个。

First

FirstOrDefault

Last

LastOrDefault

ElementAt

ElementAtOrDefault

Single

SingleOrDefault

元素操作符仅返回一个元素。First返回第一个满足条件的元素;FirstOrDefault类似于First,但如果没找到满足条件的元素就返回默认值;Last返回最后一个满足条件的元素;ElementAt制定了要返回的元素的位置。Single只返回一个满足条件的元素,如果有多个元素满足条件,则抛出一个异常。

Count

Sum

Min

Max

Average

Aggregate

聚合操作符计算集合的一个值。

ToArray

AsEnumerable

ToList

ToDictionary

Cast<TResult>

这些转换操作符将集合转换为数组。

Empty

Range

Repeat

生成操作符返回一个新集合。使用Empty时集合是空的;Range返回一系列数字;Repeat返回一个始终重复一个值的集合。
  • 筛选操作符Where
 , , , , , , , ,  };

            var query = from r in arr

                        select r;
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
  • 使用索引筛选
 //找出数组中大于5且索引不为偶数的元素
            , , , , , , , ,  };

             && index %  != );
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
  • 类型筛选
 //筛选集合中为string类型的元素
            , ,  };
            var query = obj.OfType<string>();
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
  • 复合的from子句

如果需要根据对象的一个成员进行筛选,而该成员本身又是一个集合,就可以使用符合的from子句。

var ferrariDrivers = from r in Formula1.GetChampions()
                                 from c in r.Cars
                                 where c == "Ferrari"
                                 orderby r.LastName
                                 select r.FirstName + " " + r.LastName;
            foreach (var item in ferrariDrivers)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
  • 排序
 , , , , , , , ,  };
            var query = (from r in myInt
                        orderby r descending
                        );
            foreach (var item in query)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
  • 分组
var countries = from r in Formula1.GetChampions()
                            group r by r.Country into g
                            orderby g.Count() descending, g.Key

                            select new
                            {
                                COUNTRY = g.Key,
                                COUNT = g.Count()
                            };
            foreach (var item in countries)
            {
                Console.WriteLine("{0} {1}", item.COUNTRY, item.COUNT);
            }
            Console.ReadLine();
  • 对嵌套对象分组
 var countries = from r in Formula1.GetChampions()
                            group r by r.Country into g
                            orderby g.Count() descending, g.Key

                            select new
                            {
                                Country = g.Key,
                                Count = g.Count(),
                                Racers = from r1 in g
                                         orderby r1.LastName
                                         select r1.FirstName + " " + r1.LastName
                            };
            foreach (var item in countries)
            {
                Console.WriteLine("{0} {1}", item.Country, item.Count);
                foreach (var name in item.Racers)
                {
                    Console.Write("{0};", name);
                }
                Console.WriteLine();
            }
            Console.ReadLine();
  • 内连接
 var racers = from r in Formula1.GetChampions()
                         from y in r.Years
                         select new
                         {
                             Year = y,
                             Name = r.FirstName + " " + r.LastName
                         };
            var teams = from t in Formula1.GetContructorChampions()
                        from y in t.Years
                        select new
                        {
                            Year = y,
                            Name = t.Name
                        };

            var racersAndTeams = (from r in racers
                                  join t in teams on r.Year equals t.Year
                                  select new
                                  {
                                      r.Year,
                                      Champion = r.Name,
                                      Constructor = t.Name
                                  }).Take();
            Console.WriteLine("Year World Champio\t Constructor Title");
            foreach (var item in racersAndTeams)
            {
                Console.WriteLine("{0}:{1,-20} {2}", item.Year, item.Champion, item.Constructor);
            }
            Console.ReadLine();
  • 左外连接
var racers = from r in Formula1.GetChampions()
                         from y in r.Years
                         select new
                         {
                             Year = y,
                             Name = r.FirstName + " " + r.LastName
                         };
            var teams = from t in Formula1.GetContructorChampions()
                        from y in t.Years
                        select new
                        {
                            Year = y,
                            Name = t.Name
                        };

            var racersAndTeams = (from r in racers
                                  join t in teams on r.Year equals t.Year into rt
                                  from t in rt.DefaultIfEmpty()
                                  orderby r.Year
                                  select new
                                  {
                                      r.Year,
                                      Champion = r.Name,
                                      Constructor = t == null ? "no constructor championship" : t.Name
                                  }).Take();
            Console.WriteLine("Year World Champio\t Constructor Title");
            foreach (var item in racersAndTeams)
            {
                Console.WriteLine("{0}:{1,-20} {2}", item.Year, item.Champion, item.Constructor);
            }
            Console.ReadLine();
  • 集合操作
Func<string, IEnumerable<Racer>> racersByCar = car => from r in Formula1.GetChampions()
                                                                  from c in r.Cars
                                                                  where c == car
                                                                  orderby r.LastName
                                                                  select r;

            Console.WriteLine("World champion with Ferrari and McLaren");
            foreach (var racer in racersByCar("Ferrari").Intersect(racersByCar("McLaren")))
            {
                Console.WriteLine(racer);
            }
            Console.ReadLine();
  • 合并
 var racerNames = from r in Formula1.GetChampions()
                             where r.Country == "Italy"
                             orderby r.Wins descending
                             select new
                             {
                                 Name = r.FirstName + " " + r.LastName
                             };

            var racerNamesAndStarts = from r in Formula1.GetChampions()
                                      where r.Country == "Italy"
                                      orderby r.Wins descending
                                      select new
                                      {
                                          LastName = r.LastName,
                                          Starts = r.Starts
                                      };

            var racers = racerNames.Zip(racerNamesAndStarts, (first, second) => first.Name + ",starts: " + second.Starts);
            foreach (var r in racers)
            {
                Console.WriteLine(r);
            }
            Console.ReadLine();
  • 分区
 ;
            int numberPages = (int)Math.Ceiling(Formula1.GetChampions().Count() / (double)pageSize);

            ; page < numberPages; page++)
            {
                Console.WriteLine("Page {0}", page);

                var racers = (from r in Formula1.GetChampions()
                              orderby r.LastName, r.FirstName
                              select r.FirstName + " " + r.LastName).Skip(page * pageSize).Take(pageSize);

                foreach (var name in racers)
                {
                    Console.WriteLine(name);
                }
                Console.WriteLine();
            }
            Console.ReadLine();
  • 聚合操作符
var query = from r in Formula1.GetChampions()
                        let numberYears = r.Years.Count()

                        orderby numberYears descending, r.LastName
                        select new
                        {
                            Name = r.FirstName + " " + r.LastName,
                            TimesChampion = numberYears
                        };
            foreach (var r in query)
            {
                Console.WriteLine("{0} {1}", r.Name, r.TimesChampion);
            }

            var countries = (from c in
                                 from r in Formula1.GetChampions()
                                 group r by r.Country into c
                                 select new
                                 {
                                     Country = c.Key,
                                     Wins = (from r1 in c select r1.Wins).Sum()
                                 }
                             orderby c.Wins descending, c.Country
                             select c
                                 ).Take();
            foreach (var country in countries)
            {
                Console.WriteLine("{0} {1}", country.Country, country.Wins);
            }
            Console.ReadLine();
  • 转换操作符

在迭代中使用查询时,查询才会执行,使用转换操作符会立即执行查询,把查询结果放在数组、列表或字典中。

 List<Racer> racers = (from r in Formula1.GetChampions()

                                  orderby r.Starts descending
                                  select r).ToList();
            foreach (var racer in racers)
            {
                Console.WriteLine("{0} {0:S}", racer);
            }

            Console.ReadLine();

*如果在非类型化集合上使用LINQ查询,为了定义强类型化的查询,就可以使用Cast()方法。

  • 生成操作符
, ).Select(n => n * );
            foreach (var item in values)
            {
                Console.WriteLine("{0} ", item);
            }

            Console.ReadLine();

《C#高级编程》学习总结之LINQ的更多相关文章

  1. Asp.net MVC4高级编程学习笔记-视图学习第一课20171009

    首先解释下:本文只是对Asp.net MVC4高级编程这本书学习记录的学习笔记,书本内容感觉挺简单的,但学习容易忘记,因此在边看的同时边作下了笔记,可能其它朋友看的话没有情境和逻辑顺序还请谅解! 一. ...

  2. Unix环境高级编程学习笔记——fcntl

    写这篇文正主要是为了介绍下fcntl,并将我自己在学习过程中的一些理解写下来,不一定那么官方,也有错误,希望指正,共同进步- fcntl: 一个修改一打开文件的性质的函数.基本的格式是 int fcn ...

  3. jquery高级编程学习

    jquery高级编程 第1章.jQuery入门 类型检查 对象 类型检查表达式 String typeof object === "string" Number typeof ob ...

  4. Unix环境高级编程学习笔记——dup

    dup 和 dup2   dup和dup2,都是用来将一个文件描述符复制给另一个文件描述符上,这两个文件描述符都指向同一个文件状态标志上. 只是文件描述符的大小不一样,dup所执行下的复制,肯定是返回 ...

  5. Asp.net MVC4高级编程学习笔记-视图学习第三课Razor页面布局20171010

    Razor页面布局 1)  在布局模板页中使用@RenderBody标记来渲染主要内容.比如很多web页面说头部和尾部相同,中间内容部分使用@RenderBody来显示不同的页面内容. 2)  在布局 ...

  6. Asp.net MVC4高级编程学习笔记-模型学习第四课基架与模型绑定20171027

    MVC模型 一.构建基架. MVC中的基架可以为应用程序提供CURD各种功能生成所需要的样板代码.在添加控制器的时候可以选择相应的模板以及实体对象来生成相应的模板代码. 首先定义一个模型类如下所示: ...

  7. Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101

    MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...

  8. [ASP.NET MVC4高级编程] 学习记录(一)

    理论: 先有GUI在发展,当用户按下某个键,某个进程会监听到这个动作,这个进程就是控制器.这就是MVC模式. 后来有了事件驱动编程,响应动作的是按钮本身,而不是控制器. 再后来webForm中,事件驱 ...

  9. Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)

    WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 ...

  10. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

随机推荐

  1. 给IDEA设置单独的JDK

    一.系统参数设置: 1.64位IDEA:增加IDEA_JDK_64系统变量 2.32位IDEA:增加IDEA_JKD系统变量 如图: 二.参考说明 https://intellij-support.j ...

  2. 《转》Unity3D研究院编辑器之创建Lua脚本模板

    Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧. 设置一下Lua脚本的模板地址 :  Assets/Editor/Lua/Template/lua.lua ...

  3. Hololens 硬件细节 Hardware Detail

    微软HoloLens是世界第一款完全无线缆的全息计算机.通过在新方式上赋予用户的全息体验,HoloLens重新定义了个人计算(Personal Computing).为了将3D全息图形固定到你周围的真 ...

  4. 在CentOS 7中安装与配置JDK8

    参考命令:http://www.jb51.net/os/RedHat/73016.html来进行安装 安装说明 系统环境:centos7 安装方式:rpm安装 软件:jdk-8u25-linux-x6 ...

  5. 爬虫研究-主要针对ali

    公司一个同事想爬取ali的网页受挫,自己跟着尝试了下,发现存在anti-spdier.准备了解下反爬虫,看怎么处理ali. http://www.freebuf.com/news/topnews/96 ...

  6. Python Turtle

    之前对这个turtle这个模块不了解,觉得没什么意思,最近试了一下发现不错,来点最简单的.写的时候深刻感受到自己智商是个硬伤,算角度都算了半天... 图就不导了吧,懒癌晚期... import tur ...

  7. bzoj 2563: 阿狸和桃子的游戏

    开始写了一些东西但是后来浏览器挂了就没有存下来简直!!!!!!!!!!!!!QAQ 不想再写一遍了...总之是简单贪心. #include <iostream> #include < ...

  8. 向mysql中插入Date类型的数据

    先看数据库表的定义 date字段为sql.date类型.我要向其中插入指定的日期和当前日期. 一.插入当前日期 思路:先获取当前系统,在将当前系统时间转换成sql类型的时间,然后插入数据库.代码如下 ...

  9. *HDU2147 博弈

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  10. 谷歌浏览器允许ajax跨域以非安全模式打开

    最近使用ajax的时候,因为是在本地测试调用 后台时一直会报错. 解决方案:用谷歌浏览器 以非安全的模式打开 在cmd命令行中 cd 到谷歌的安装目录下 (右键 属性 复制路径) 然后在 运行如下命令 ...