专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

linq如何使用 Select 和 SelectMany 方法通过基于方法的查询语法来查询-投影

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:50:29       共计:3627 浏览

本主题中的示例演示如何使用 Select 和 SelectMany 方法通过基于方法的查询语法来查询 AdventureWorks 销售模型 。 这些示例中使用的 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;


Select

示例


以下示例使用 Select 方法以将 Product.Name 和 Product.ProductID 属性投影到一系列匿名类型。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   var query = context.Products

       .Select(product => new

       {

           ProductId = product.ProductID,

           ProductName = product.Name

       });


   Console.WriteLine("Product Info:");

   foreach (var productInfo in query)

   {

       Console.WriteLine("Product Id: {0} Product name: {1} ",

           productInfo.ProductId, productInfo.ProductName);

   }

}


示例


以下示例使用 Select 方法以只返回一系列产品名称。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   IQueryable<string> productNames = context.Products

       .Select(p => p.Name);


   Console.WriteLine("Product Names:");

   foreach (String productName in productNames)

   {

       Console.WriteLine(productName);

   }

}


SelectMany

示例


以下示例使用 SelectMany 方法以选择 TotalDue 低于 500.00 的所有订单。

C#


decimal totalDue = 500.00M;

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   ObjectSet<Contact> contacts = context.Contacts;

   ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;


   var query =

   contacts.SelectMany(

       contact => orders.Where(order =>

           (contact.ContactID == order.Contact.ContactID)

               && order.TotalDue < totalDue)

           .Select(order => new

           {

               ContactID = contact.ContactID,

               LastName = contact.LastName,

               FirstName = contact.FirstName,

               OrderID = order.SalesOrderID,

               Total = order.TotalDue

           }));


   foreach (var smallOrder in query)

   {

       Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Total Due: ${4} ",

           smallOrder.ContactID, smallOrder.LastName, smallOrder.FirstName,

           smallOrder.OrderID, smallOrder.Total);

   }

}


示例


以下示例使用 SelectMany 方法以选择在 2002 年 10 月 1 或此日期之后发出的所有订单。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   ObjectSet<Contact> contacts = context.Contacts;

   ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;


   var query =

   contacts.SelectMany(

       contact => orders.Where(order =>

           (contact.ContactID == order.Contact.ContactID)

               && order.OrderDate >= new DateTime(2002, 10, 1))

           .Select(order => new

           {

               ContactID = contact.ContactID,

               LastName = contact.LastName,

               FirstName = contact.FirstName,

               OrderID = order.SalesOrderID,

               OrderDate = order.OrderDate

           }));


   foreach (var order in query)

   {

       Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Order date: {4:d} ",

           order.ContactID, order.LastName, order.FirstName,

           order.OrderID, order.OrderDate);

   }

}


请参阅


   LINQ to Entities 中的查询



版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:如何使用 Where 和 Where…Contains 方法通过基于方法的查询语法来查询-筛选 | ·下一条:主流分布式存储技术的对比分析与应用

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有