隐藏

如何使用 Where 和 Where…Contains 方法通过基于方法的查询语法来查询-筛选

发布:2021/7/9 16:17:46作者:管理员 来源:本站 浏览次数:1587

本主题中的示例演示如何使用 Where 和 Where…Contains 方法通过基于方法的查询语法来查询 AdventureWorks 销售模型 。 请注意,Where .。。Contains 不能用作 已编译查询的一部分。


这些示例中使用的 AdventureWorks 销售模型从 AdventureWorks 示例数据库中的 Contact、Address、Product、SalesOrderHeader 和 SalesOrderDetail 等表生成。


本主题中的示例使用以下 using / Imports 语句:

C#


using System;

using System.Data;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data.Objects;

using System.Globalization;

using System.Data.EntityClient;

using System.Data.SqlClient;

using System.Data.Common;


其中

示例


以下示例返回所有联机订单。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   var onlineOrders = context.SalesOrderHeaders

       .Where(order => order.OnlineOrderFlag == true)

       .Select(s => new { s.SalesOrderID, s.OrderDate, s.SalesOrderNumber });


   foreach (var onlineOrder in onlineOrders)

   {

       Console.WriteLine("Order ID: {0} Order date: {1:d} Order number: {2}",

           onlineOrder.SalesOrderID,

           onlineOrder.OrderDate,

           onlineOrder.SalesOrderNumber);

   }

}


示例


以下示例返回订单数量大于 2 且小于 6 的订单。

C#


int orderQtyMin = 2;

int orderQtyMax = 6;

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   var query = context.SalesOrderDetails

       .Where(order => order.OrderQty > orderQtyMin && order.OrderQty < orderQtyMax)

       .Select(s => new { s.SalesOrderID, s.OrderQty });


   foreach (var order in query)

   {

       Console.WriteLine("Order ID: {0} Order quantity: {1}",

           order.SalesOrderID, order.OrderQty);

   }

}


示例


以下示例返回所有红色产品。

C#


String color = "Red";

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   var query = context.Products

       .Where(product => product.Color == color)

       .Select(p => new { p.Name, p.ProductNumber, p.ListPrice });


   foreach (var product in query)

   {

       Console.WriteLine("Name: {0}", product.Name);

       Console.WriteLine("Product number: {0}", product.ProductNumber);

       Console.WriteLine("List price: ${0}", product.ListPrice);

       Console.WriteLine("");

   }

}


示例


以下示例使用 Where 方法以查找在 2003 年 12 月 1 日之后生成的订单,然后使用 order.SalesOrderDetail 导航属性以获取每个订单的详细信息。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   IQueryable<SalesOrderHeader> query = context.SalesOrderHeaders

       .Where(order => order.OrderDate >= new DateTime(2003, 12, 1));


   Console.WriteLine("Orders that were made after December 1, 2003:");

   foreach (SalesOrderHeader order in query)

   {

       Console.WriteLine("OrderID {0} Order date: {1:d} ",

           order.SalesOrderID, order.OrderDate);

       foreach (SalesOrderDetail orderDetail in order.SalesOrderDetails)

       {

           Console.WriteLine("  Product ID: {0} Unit Price {1}",

               orderDetail.ProductID, orderDetail.UnitPrice);

       }

   }

}


Where…Contains

示例


以下示例将一个数组用作 Where…Contains 子句的一部分,以查找 ProductModelID 与数组中的值匹配的所有产品。

C#


using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())

{

   int?[] productModelIds = { 19, 26, 118 };

   var products = AWEntities.Products.

       Where(p => productModelIds.Contains(p.ProductModelID));


   foreach (var product in products)

   {

       Console.WriteLine("{0}: {1}", product.ProductModelID, product.ProductID);

   }

}


备注


作为 Where…Contains 子句中谓词的一部分,您可以使用 Array、List<T> 或实现 IEnumerable<T> 接口的任何类型的集合。 还可以在 LINQ to Entities 查询中声明和初始化集合。 有关更多信息,请参见下一个示例。

示例


以下示例声明并初始化 Where…Contains 子句中的数组,以查找 ProductModelID 或 Size 与数组中的值匹配的所有产品。

C#


using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())

{

   var products = AWEntities.Products.

       Where(p => (new int?[] { 19, 26, 18 }).Contains(p.ProductModelID) ||

                  (new string[] { "L", "XL" }).Contains(p.Size));


   foreach (var product in products)

   {

       Console.WriteLine("{0}: {1}, {2}", product.ProductID,

                                          product.ProductModelID,

                                          product.Size);

   }

}


请参阅


   LINQ to Entities 中的查询