【已更新最新开发文章,点击查看详细】
本篇介绍 LINQ 查询表达式和一些在查询中执行的典型操作。
获取数据源
LINQ 查询中,先使用
from 子句引入数据源 (customers) 和范围变量 (cust) 。// 从 IEnumerable<Customer> 中查询所有的客户信息 var queryAllCustomers = from cust in customers select cust;
let 子句。
对于非泛型数据源(例如 ArrayList),必须显式键入范围变量。 有关详细信息,请参阅如何:使用 LINQ 查询 ArrayList (C#) 和 from 子句。
筛选
在下列示例中,仅返回地址位于“London”的
customers。var queryLondonCustomers = from cust in customers where cust.City == "London" select cust;
例如,若要仅返回来自“London”的客户 AND 该客户名称为“Devon”,可编写以下代码:
where cust.City=="London" && cust.Name == "Devon"
要返回来自 London 或 Paris 的客户,可编写以下代码:
where cust.City == "London" || cust.City == "Paris"
中间件排序
由于
Name是字符串,默认比较器将按字母顺序从 A 到 Z 进行排序。var queryLondonCustomers3 = from cust in customers where cust.City == "London" orderby cust.Name ascending select cust;
orderby 子句。
分组
在这种情况下,
cust.City是键。// queryCustomersByCity 是 IEnumerable<IGrouping<string, Customer>> 类型 var queryCustomersByCity = from cust in customers group cust by cust.City; // customerGroup 是 IGrouping<string, Customer> 类型 foreach (var customerGroup in queryCustomersByCity) { Console.WriteLine(customerGroup.Key); foreach (Customer customer in customerGroup) { Console.WriteLine(" {0}", customer.Name); } }
列表中的每个元素都是具有 Key成员的对象,列表中的元素根据该键被分组。
外层循环循环访问每个组,内层循环循环访问每个组的成员。
下列查询仅返回包含两个以上客户的组:
// custQuery 是 IEnumerable<IGrouping<string, Customer>> 类型 var custQuery = from cust in customers group cust by cust.City into custGroup where custGroup.Count() > 2 orderby custGroup.Key select custGroup;
有关详细信息,请参阅 group 子句。
联接
LINQ 中,
join 子句始终作用于对象集合,而非直接作用于数据库表。var innerJoinQuery = from cust in customers join dist in distributors on cust.City equals dist.City select new { CustomerName = cust.Name, DistributorName = dist.Name };
不必执行联接,只需使用点表示法访问订单:
from order in Customer.Orders...
有关详细信息,请参阅 join 子句。
选择(投影)
select 子句进行数据转换。
其他技术请参阅
【已更新最新开发文章,点击查看详细】