码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2019-09-03 23:58:03      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:The   tar   编译   操作   ble   span   rom   ===   oftype   

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子句

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

标签:The   tar   编译   操作   ble   span   rom   ===   oftype   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!