LinqContains操作符介绍-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

LinqContains操作符介绍

在向大家详细介绍Linq Contains操作符之前,首先让大家了解下投影和排序,然后全面介绍Linq Contains操作符。

投影和排序

您可能还注意到我在之前的示例中暗藏了一个投影。在使用 Max 操作符之前,LINQ 查询并不返回客户列表。而是会返回一个投影,此投影创建了包含 CustomerID 属性和 Total 属性(客户的整个消费金额)的一个新实体。投影是 LINQ 必不可少的一部分,如前一示例所示,将它们投影到序列中后,就可使用标准查询操作符来进一步处理它们。

 
 
 
  1. foreach (var item in 
  2. query.OrderByDescending(x => x.Total)
  3. .ThenBy(x => x.CustomerID))
  4. {
  5. Console.WriteLine(item.CustomerID + " == " + item.Total);
  6. }

在该代码段中,我添加了 ThenBy 操作符和一个 Lambda 表达式,以表示序列应首先按 Total 属性降序排列,然后按投影的 CustomerID 属性升序排列。

Linq Contains操作符

如果需要确定序列中是否存在某个值,可使用标准查询操作符 Any。限定符(如 Any、All 和 Contains)会搜索元素序列,并评估序列是否满足 lambda 表达式的条件。如果需检查序列以确定某些事宜(例如:是否存在来自特定地址的客户、所有客户是否来自同一国家或者任意其他分析确定性问题),它将非常有用。

例如,以下 LINQ 查询会检查是否来自 United Kingdom 的所有客户都位于 London。它使用限定符 All 并将其传递给仅评估城市是否为 London 的 lambda 表达式。如果序列中的每个元素都满足此条件并且 lambda 表达式返回 true,然后 All 操作符会返回 true:

 
 
 
  1. using (Entities entities = new Entities())
  2. {
  3. bool allUKCustomerAreFromLondon = (from c in entities.Customers
  4. where c.Country == "UK"
  5. select c).All(
  6. c => c.City.Equals("London"));
  7. Console.WriteLine(allUKCustomerAreFromLondon ? "Yes" : "No");
  8. }

需在此查询中询问的另一问题是序列中是否有来自 United Kingdom 的 Cowes 的实体。对于此问题,可使用 Any 限定符来计算序列,如下所示:

 
 
 
  1. using (Entities entities = new Entities())
  2. {
  3. bool isOneUKCustomerFromCowes = (from c in entities.Customers
  4. where c.Country == "UK"
  5. select c).Any(
  6. c => c.City.Equals("Cowes"));
  7. Console.WriteLine(isOneUKCustomerFromCowes? "Yes" : "No");
  8. }

Linq Contains操作符在评估序列中是否包括您所查找的项目时类似于Any操作符。Any操作符可确定序列的某个项中是否存在某个值,而Linq Contains操作符则确定序列中是否存在特定项目实例。例如,在将某个对象添加到序列中之前,您可能希望确保序列中并未包含该对象。

 
 
 
  1. using (Entities entities = new Entities())
  2. {
  3. Customers customerBSBEV = (from c in entities.Customers
  4. where c.CustomerID == "BSBEV"
  5. select c).First();
  6. var customersUK = from c in entities.Customers
  7. where c.Country == "UK"
  8. select c;
  9. bool isCustomerInSequence = customersUK.Contains(customerBSBEV);
  10. Console.WriteLine(isCustomerInSequence? "Yes" : "No");
  11. }

有许多标准查询操作符均可定义为 Enumerable 和 Queryable 序列类的扩展方法。如我之前所示,这些操作符有助于扩展 LINQ 的功能。我还展示了结合使用多个 .NET Framework 3.5 新增强功能(包括 lambda 表达式、LINQ、实体框架和隐式类型化变量)来更加轻松地编写功能强大的代码和逻辑。


网站栏目:LinqContains操作符介绍
文章URL:http://kswsj.cn/article/cohiiho.html

其他资讯