LINQ
LINQ(语言集成查询)是C#和VB.NET中的统一查询语法,用于从不同的源和格式检索数据。它集成在C#或VB中,从而消除了编程语言和数据库之间的不匹配,并为不同类型的数据源提供了单个查询接口。
LINQ查询语法
LINQ的查询语法与SQL相同,以from子句开头,可以以select或groupby子句结尾。
csharp
var result = from product in products
where product.Price > 100
orderby product.Name
select product;
比较适合复杂的多表连接查询、分表查询、可读性好。
LINQ方法语法
方法语法(也称为连贯语法)使用Enumerable 或 Queryable静态类中包含的扩展方法。方法语法包括扩展方法和 Lambda 表达式。
csharp
var result = products
.Where(product => product.Price > 100)
.OrderBy(product => product.Name);
适合简单的单表操作,使用某些只有方法语法的操作符(如First(), Single()等)。
以上两者在性能上没有区别,因为查询语句在编译时会被转换为对应的方法调用。
嵌入委托方法
可以通过委托来描述筛选条件,方便复用。
csharp
// 定义委托
Func<Student, bool> isTeenager = s => s.Age > 12 && s.Age < 20;
// 使用方法语法调用
var teenStudents = students.Where(isTeenager)
.OrderBy(s => s.Name)
.ToList();
// 可以在多个地方复用
var teenCount = students.Count(isTeenager);
var firstTeen = students.FirstOrDefault(isTeenager);
var teenStudents = from s in students where isTeenager(s) select s;
完整的LINQ查询方式矩阵
| 查询方式 | 委托变量 | 内联条件 |
|---|---|---|
| 查询语法 | from s in students where isTeenager(s) select s |
from s in students where s.Age>12 select s |
| 方法语法 | students.Where(isTeenager) |
students.Where(s => s.Age>12) |