文章目录
LINQ(Language Integrated Query,语言集成查询),可为C#语法提供强大的查询功能。
一、LINQ概述与查询语法
LINQ提供了一种跨数据源和数据格式 的统一模型,实现查询。它使用C#等语言以查询数据库相同的方式查询内存数据。
LINQ的编写从from关键字开始,结合使用where、select等关键字,实现各种条件的查询。
LINQ主要关键字:
关键字 | 说明 |
---|---|
from | 指定范围变量和数据源 |
where | 根据bool表达式从数据源中筛选数据 |
select | 指定查询结果中的元素所具有的类型或表现形式 |
group | 对查询结果按照键/值执行分组 |
into | 提供一个标识符,它可以充当对join、group或select字句结果的引用 |
orderby | 对查询出的元素执行排序(ascending/descending) |
join | 按照两个指定匹配条件对等连接两个数据源 |
let | 产生一个用于存储子表达式查询结果的范围变量 |
完整的LINQ语句的写法可以定义为以下结构:
举例1:
代码截图:
效果图:
举例2:
首先定义两个类,分别是:Product和Employees
主程序中的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
List<Product> products = new List<Product>() {
new Product{Name="iphone11",CategoryID="手机"},
new Product{Name="香蕉",CategoryID="水果"},
new Product{Name="辣条",CategoryID="零食"},
new Product{Name="葡萄",CategoryID="水果"}
};
var result = from p in products
select p;
foreach (var item in result)
{
Console.WriteLine($"商品名称:{item.Name},商品类别:{item.CategoryID}");
}
}
}
}
最终效果图:
如果我们只需要查询水果,其他代码不变,只需要改如下代码即可
效果图:
如果我们需要根据产品的类别进行分组查询:
效果图:
如果想查询每个类别所对应的数量:
效果图:
之前我们定义了一个Employees类,一直没有用到,所以接下来举个类似的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
List<Employees> employees = new List<Employees>()
{
new Employees{LastName="张三",TitleOfCourtesy="助理设计师"},
new Employees{LastName="李四",TitleOfCourtesy="软件设计师"},
new Employees{LastName="赵六",TitleOfCourtesy="助理设计师"},
new Employees{LastName="王五",TitleOfCourtesy="软件设计师"},
new Employees{LastName="小明",TitleOfCourtesy="系统分析师"}
};
var result = from p in employees
select new { LastName = p.LastName, TitleOfCourtesy = p.TitleOfCourtesy }
into EmployeesList
orderby EmployeesList.TitleOfCourtesy ascending
select EmployeesList;
//ascending 升序排序
//descending 降序排序
foreach (var item in result)
{
Console.WriteLine("员工姓名:{0},员工职务:{1}",item.LastName,item.TitleOfCourtesy);
}
}
}
}
效果图: