c#入门经典 part 6

LINQ查询

1
2
3
4
5
6
var results = 
from n in names
where n.StartsWith("S")
orderby n descending
select n // select new(n, ...)
;

方法语法

1
2
var results = names.OrderBy(n => n).Where(n => n.StartsWith("S"));
var results = names.OrderByDescending(n => n.Substring(n.Length - 1)).Where(n => n.StartsWith("S")).select(n => new(n, ...)).Distinct();

聚合运算符

1
2
3
4
5
results.Count();
results.Max();
results.Min();
results.Average();
results.Sum(n => (long) n);

Any, All

1
2
bool res = customers.Any(c => c.Name == "Tom");
bool res = customers.All(c => c.Name == "Tom");

多级排序

1
2
3
orderby c.Name, c.Age

var res = customers.OrderBy(c => c.Name).ThenBy(c => c.Age)...;

组合查询

1
2
3
4
5
var res =
from c in customers
group c by c.Region into cg
select new {TotalSales = cg.Sum(c => c.Sales), Region = cg.Key}
;

Take(): 取前n个结果

Skip(): 跳过前n个结果

First(), FirstOrDefault(): 返回第一个匹配给定条件的元素

集合运算符Intersect(), Except(), Union()

Join查询

1
2
3
4
var res =
from c in customers
join o in orders on c.ID equals o.ID
;