C# LINQ
LINQ(Language Integrated Query):语言集成查询。它允许编写C#代码以查询数据库相同的方式操作内存数据。
int[] numbers = { 5, 10, 8, 3, 6, 12 }; //数据源必须是实现了IEnumerable接口的类型
1、Query语法:
说明:基本语法结构(这条语句不会马上执行,只有当queryNum这个变量被使用时,才会执行这条语句):
IEnumerable<int> queryNum =
from num in numbers
where num % 2 == 0
orderby num
select num;
foreach (var i in queryNum)
{
Console.WriteLine(i.ToString());
}
2、Method语法:
Where,Max,Select,Sum,Any,Average,All,Concat等都是针对IEnumerable的对象进行扩展的。也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法。
(1)
IEnumerable<int> MethodNum = numbers.Where(num => num % 2 == 0).OrderBy(num => num);
foreach (var i in MethodNum)
{
Console.WriteLine(i.ToString());
}
(2)
var result = numbers.Where(num => { return num > 6; }).Sum();
Console.WriteLine(result);
(3)
比如说我们要从用户表customer和用户订单表orders中,查询上海的用户,在最近10个月中至少消费3笔满10快钱的用户的姓名和年龄。如果写成传统的方法,不知道要写多少代码,而且各种复杂的处理逻辑使得代码的语义非常不清晰,但是,如果写成LINQ的话,会是如下:
var results = from customer in customers
where customer.State == "WA"
let custOrders = (from order in orders
where customer.ID == order.ID
select new { order.Date, order.Amount })
where custOrders.Count(co => co.Amount >= 10 &&
co.Date >= DateTime.Now.AddMonths(−10)) >= 3
select new { customer.Name, customer.Age };
foreach (var result in results) {
Console.WriteLine("{0} {1}", result.Name, result.Age);
LINQ语法主要有以下几个:
- form xx in xx 遍历数组或者链表
- group xx by xx into xx将什么根据什么条件打包成一个group如果下面LINQ语句不需用到这个group的属性可不用写into和后面的东西
- let xx=xx 改变前面传递的变量,然后传递给下面的语句
- order by xx descending 按照什么从小到大顺序排序,加上descending是从大到小排序
- where xx 过滤掉不符合条件的
- join xx in xx on xx 遍历新链表或者数组的元素,需要新满足什么条件的元素
- select xx 返回的是什么
链接:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
https://www.jianshu.com/p/4b90769751b0
https://blog.****.net/lee576/article/details/1682569