全面解析LINQ:从Where到Select/Distinct

需积分: 9 1 下载量 7 浏览量 更新于2024-07-27 收藏 202KB DOCX 举报
"LINQ用法大全" LINQ(Language Integrated Query,语言集成查询)是.NET框架的一个重要特性,它允许开发者使用类似SQL的查询语法在各种数据源上进行操作,如对象集合、数据库、XML文档等。这篇资料全面介绍了LINQ的用法,非常适合学习和参考。 首先,我们来看一下LINQ中的`Where`操作。`Where`是用于筛选数据的关键字,它的功能类似于SQL中的`WHERE`子句。`Where`操作可以有三种不同的形式: 1. 简单形式:基本的条件筛选,例如选取所有位于伦敦的客户或筛选1994年后雇用的员工。这可以通过将筛选条件作为参数传递给`Where`方法来实现。 ```csharp var q = from c in db.Customers where c.City == "London" select c; var q = from e in db.Employees where e.HireDate >= new DateTime(1994, 1, 1) select e; ``` 2. 关系条件形式:这种形式可以处理更复杂的逻辑,比如基于两个字段的关系进行筛选。例如,找出库存量低于订货点但未断货的产品,或者选取价格高于10且已停产的产品。 ```csharp var q = from p in db.Products where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued select p; var q = from p in db.Products where p.UnitPrice > 10m || p.Discontinued select p; // 使用两次Where方法也可以实现相同效果 var q = db.Products.Where(p => p.UnitPrice > 10m).Where(p => p.Discontinued); ``` 3. First()形式:`First()`方法用于返回满足条件的第一个元素,相当于SQL中的`TOP(1)`。它可以用于获取特定的元素,如选择第一个发货方,特定的客户,或者运费超过10.00的订单。 ```csharp Shipper shipper = db.Shippers.First(); Customer cust = db.Customers.First(c => c.CustomerID == "BONAP"); Order ord = db.Orders.First(o => o.Freight > 10.00M); ``` 接下来是`Select`和`Distinct`操作: - Select介绍1:`Select`用于投影数据,将源数据转换为新的类型或结构。例如,可以将客户对象转换为只包含名称和城市的新对象。 - Select介绍2:`Select`还可以用于计算、组合或简化数据。例如,从订单列表中提取每个订单的总金额。 - Select介绍3和Distinct介绍:`Distinct`用于去除重复的元素,创建唯一的结果集。例如,从产品列表中选取唯一的产品ID。 结合`Select`和`Distinct`,可以对数据进行进一步的处理,比如选取产品列表中不重复的产品ID。 ```csharp var uniqueProductIDs = db.Products.Select(p => p.ProductID).Distinct(); ``` LINQ提供了一种统一的方式来处理各种数据源的查询,极大地提高了代码的可读性和可维护性。通过熟练掌握`Where`、`First`、`Select`和`Distinct`这些核心操作,开发者能够更高效地处理数据,实现复杂的数据过滤、转换和去重任务。