【c#基础】Linq操作符用法说明:

1:筛选

Where :使用where子句,可以合并多个表达式。例如:找出赢得至少15场比赛的美国和英国赛车手

   var racers = from r in Formulal.GetChampions()             where r.Wins > 15 && (r.Country == "USA" || r.Country == "UK")          select r;
            foreach (var r in racers)
            {
                Console.WriteLine($"{r:A}");
            }

一样的结果:

 var racers2 = Formulal.GetChampions().Where(r => r.Wins > 15 && (r.Country == "USA" || r.Country == "UK")).Select(r=>r);

  

其中r:A中的A所指定

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/formatting-numeric-results-table

使用格式说明符可以创建格式字符串。 格式字符串的格式如下:Axx,其中

  • A 是格式说明符,控制应用于数值的格式设置类型。
  • xx 是精度说明符,影响格式化输出中的位数。 精度说明符值的范围为 0 到 99。

 2:用索引筛选

在where()方法重载中,可以传递第二个参数--索引。

索引时筛选器返回的每个结果的计数器。可以在表达式中使用这个索引。执行基于索引的计算。

1   //查询姓氏以A开头的所有赛车手,并且索引是奇数的赛车手
2             var racers3 = Formulal.GetChampions()        .Where((r, index) => r.LastName.StartsWith("A") && index % 2 != 0);
3             foreach (var racer in racers3)
4             {
5                 Console.WriteLine($"{racer:A}");
6             }

3:类型筛选

为了基于类型筛选,可以使用OfType()扩展方法。

 1             object[] data = {"one", 1, 3, "four", "five", 6};
 2             var query = data.OfType<string>();
 3             Console.WriteLine("输出string类型");
 4             foreach (var s in query)
 5             {
 6                 Console.WriteLine(s);
 7             }
 8
 9             Console.WriteLine("输出int类型");
10             var query2 = data.OfType<int>();
11             foreach (var q in query2)
12             {
13                 Console.WriteLine(q);
14             }

4:复合的from子句

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

下列例子中Cars是 r中的一个属性,Cars是一个字符串数组

//如果需要根据对象的一个成员进行筛选,而该成员本身是一个系列,就可以使用复合的from子句
            var ferrariDrivers = from r in Formulal.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);
            }    

c#编译器把复合的from子句和Linq查询转换为SelectMany()扩展方法。

SelectMany()方法可用于迭代序列的序列。

1  Console.WriteLine("=====SelectMany查询方法======");
2             var ferrariDrivers1 = Formulal.GetChampions().SelectMany(r => r.Cars, (r, c) => new {Racer = r, Car = c}).Where(r=>r.Car=="Ferrari").OrderBy(r=>r.Racer.LastName).Select(r=>r.Racer.FirstName+" "+r.Racer.LastName+" " +r.Car);
3             foreach (var item in ferrariDrivers1)
4             {
5                 Console.WriteLine(item);
6             }

这个方法和from复合子句返回的结果是一样的。

 5:排序

Orderby子句 和 orderby descending子句

 1 var racers = from r in Formulal.GetChampions()
 2                 where r.Country == "Italy"
 3                 orderby r.Wins descending
 4                 select r;
 5             foreach (var racer in racers)
 6             {
 7                 Console.WriteLine(racer);
 8             }
 9
10             Console.WriteLine();
11             var racers1 = Formulal.GetChampions().Where(r => r.Country == "Italy").OrderByDescending(r => r.Wins);
12             foreach (var racer in racers1)
13             {
14                 Console.WriteLine(racer);
15             }

说明:OrderBy()和OrderByDescending()方法返回IOrderEnumerable<TSource>.这个接口派生自

IEnumerable<TSource>接口。但包含一个额外的方法CreateOrderedEnumerable<TSource>()。这个方法用于进一步给序列排序。如果根据关键字选择器排序,其中有两项相同,就可以使用ThenBy()和ThenByDescending()方法继续排序。可以添加任意多个ThenBy()和ThenByDesceding()方法对集合排序。

 1  var racers2 =
 2                 (from r in Formulal.GetChampions() orderby r.Country, r.LastName, r.FirstName select r).Take(10);
 3             foreach (var racer in racers2)
 4             {
 5                 Console.WriteLine(racer);
 6             }
 7
 8             Console.WriteLine();
 9
10             var racer3 = Formulal.GetChampions().OrderBy(r => r.Country).ThenBy(r => r.LastName)
11                 .ThenBy(r => r.FirstName).Take(10);
12             foreach (var racer in racer3)
13             {
14                 Console.WriteLine(racer);
15             }

 6:分组

要根据一个关键字值对查询结果分组,可以使用group子句

原文地址:https://www.cnblogs.com/SignX/p/11448977.html

时间: 2024-11-05 13:04:37

【c#基础】Linq操作符用法说明:的相关文章

Swift的基础,操作符,字符串和集合类型

这篇文章主要讲解苹果Swift官方指南的第二章前四节的要点内容,如果想看完整的英文文档可以去苹果开发者页面下载. Basic 声明常量let 声明变量var 注释依旧使用"//" "/**/", 注意这里"/**/"在Swift可以嵌套使用 表达式结尾不再有分号 整数 你可以声明为Int或者UInt,他们本身适应不同平台(64位, 32位),类似于NSInteger,NSUInteger 也可以直接声明为指定字节数的Int,如: Int8, In

(C#基础)Linq学习理解

一遍学习基础,一遍练习打字,很多乐趣. 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace dazilianxi { public class Category { public int Id { get;set;} public string Name { get; set; } } public c

EasyUI中Base(基础)的基本用法

EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizable 调整大小 6.pagination 分页 7.searchbox 搜索框 8.progressbar 进度条 9.tooltip 提示框 步骤: 1.导入支持easyUI所需的文件 使用easyUi里面的插件,先要引入easyUi.css.icon.css.jquery.easyui.min.

C++点和箭头操作符用法区别

C++点和箭头操作符用法区别 变量是对象的时候用“.”访问 变量是对象指针的时候用“->”访问 例: #inlclude <iostream> using namespace std; class A {     public:        int x;        int y;  }; int main() {       A a;       a.x=100;        //对象用点访问       // a->y=100;     //error       A* p

java基础之泛型用法

1.什么是泛型 泛型是java中保障类型安全的一种机制.它通过对变量类型的假设,实现变量类型的进行限制,从而在一定程度上保证程序编译时变量类型的安全.反之,如果没有泛型,这些假设则只存在于程序员的大脑中,这样会导致类型转换的异常在程序运行时才被发现. //不用泛型 List list1 = new ArrayList(); list1.add(1); Object o = list1.get(0); //返回Object类型对象 Integer i = (Integer) o; //需预先知道类

java基础之synchronized用法

首先,参考文章:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html PS:参考文章很长,但内容非常丰富,若是初学者,更要有耐心读完. 第二,个人小结: 关于synchronized关键字的作用: 1.在某个对象的所有synchronized方法中,在某一时刻,只能有一个唯一的一个线程去访问这些synchronized方法 2.如果一个方法是synchronized方法,那么该synchronized关键字表示给当前对

Linux基础以及帮助用法

Linux基础以及帮助用法:主要介绍linux登录之后一些基础命令,比如:查看用户.查看内存情况.磁盘情况.终端类型介绍,关机重启.以及各种命令的帮助用法 用户登录 1.root用户 一个特殊的管理帐户            也被称为超级用户            root已接近完整的系统控制            对系统损害几乎有无限的能力            除非必要,不要登录为root 2.普通用户 权限有限 造成的损害的能力有限 3. 查看当前用户的命令: (1)whoami (2)i

Linux基础篇--linux基础和帮助用法

Linux基础篇--linux基础和帮助用法 本章概要 用户登录 终端 Shell介绍 执行命令 简单命令 Tab键补全 命令行历史 bash快捷键 使用gnome-terminal whatis command--help manandinfo 本地帮助文档/usr/share/doc/ 官网在线文档 其它网站和搜索 用户登录 root用户   一个特殊的管理帐户   也被称为超级用户   root已接近完整的系统控制   对系统损害几乎有无限的能力   除非必要,不要登录为root 普通用户

LINQ的用法

本文基于.NET Framework 2.0编写 本文PDF下载 推荐大家下载本文的PDF进行阅读,可以方便的使用书签来阅读各个方法,而且代码中的关键字是高亮显示的. 转载请注明出处. 一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataContext db=new NorthwindDataContext()) { //查询语法 var query =