绵阳做手机网站,功能网站建设,网站建设专家评审意见,品牌营销品牌推广一、LINQ 架构体系
1. LINQ 的核心思想
统一查询模型#xff1a;对对象、XML、数据库等不同数据源使用一致的语法。强类型检查#xff1a;编译时类型安全#xff0c;减少运行时错误。
2. 核心组件
技术数据源典型场景LINQ to Objects内存集合 (IEnumerable)过滤/排序集合…一、LINQ 架构体系
1. LINQ 的核心思想
统一查询模型对对象、XML、数据库等不同数据源使用一致的语法。强类型检查编译时类型安全减少运行时错误。
2. 核心组件
技术数据源典型场景LINQ to Objects内存集合 (IEnumerable)过滤/排序集合数据LINQ to XMLXML 文档解析/查询 XML 节点LINQ to SQL关系数据库将查询翻译为 SQL 执行
关键代码示例
// LINQ to Objects
var numbers new Listint { 1, 2, 3 };
var query numbers.Where(n n 1);// LINQ to XML
XDocument doc XDocument.Load(data.xml);
var elements doc.Descendants(Book).Where(x (int)x.Element(Price) 50);// LINQ to SQL伪代码
var db new DataContext();
var users db.Users.Where(u u.Age 18);二、查询表达式 vs 方法语法
1. 本质区别
查询表达式类 SQL 语法from...where...select可读性高。方法语法链式调用扩展方法Where()/Select()灵活性更强。
2. 转换关系 所有查询表达式会被编译器翻译为方法语法。
代码对比
// 查询表达式
var query1 from num in numbers where num % 2 0 select num * 2;// 方法语法
var query2 numbers.Where(num num % 2 0).Select(num num * 2);三、IEnumerable 接口解析
1. 核心机制
IEnumerable定义迭代能力通过 GetEnumerator()。IEnumerator实现遍历逻辑MoveNext() 和 Current。
2. LINQ 的延迟执行
查询定义时不执行直到迭代结果如 foreach 或 ToList()时才触发。
代码验证延迟执行
var numbers new Listint { 1, 2, 3 };
var query numbers.Select(n {Console.WriteLine($Processing {n});return n * 2;
});// 此时无输出
foreach (var num in query) { } // 输出Processing 1, Processing 2, Processing 3四、创建首个 LINQ 查询三步法
1. 定义数据源
var products new ListProduct {new Product { Name Apple, Price 15 },new Product { Name Laptop, Price 5000 },new Product { Name Book, Price 80 }
};2. 编写查询
// 方法语法
var expensiveProducts products.Where(p p.Price 100).OrderBy(p p.Name);3. 执行查询
foreach (var product in expensiveProducts)
{Console.WriteLine(product.Name);
}五、练习集合过滤与投影
任务 1过滤数据
// 数据源
var numbers Enumerable.Range(1, 100);// 目标选出 3 的倍数且大于 50 的数字
var result numbers.Where(n n % 3 0 n 50);任务 2投影转换
// 数据源
var persons new ListPerson { /* 包含姓名和年龄的对象 */ };// 目标生成 { Name 张三, Initial Z } 形式的新对象
var initials persons.Select(p new {Name p.Name,Initial p.Name[0]
});六、扩展思考
如何通过 yield return 自定义一个延迟执行的 LINQ 操作IQueryable 和 IEnumerable 在查询数据库时的区别如何组合 Where().OrderBy().Select() 实现复杂查询