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所指定
使用格式说明符可以创建格式字符串。 格式字符串的格式如下: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