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

如何使用 Join 和 GroupJoin 方法通过基于方法的查询语法来查询-联接运算符

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

本主题中的示例演示如何使用 Join 和 GroupJoin 方法通过基于方法的查询语法来查询 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;


GroupJoin

示例


以下示例针对 SalesOrderHeader 表和 SalesOrderDetail 表执行 GroupJoin 以查找每个客户的订单数。 组联接等效于左外部联接,它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素)。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;

   ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails;


   var query = orders.GroupJoin(details,

       order => order.SalesOrderID,

       detail => detail.SalesOrderID,

       (order, orderGroup) => new

       {

           CustomerID = order.SalesOrderID,

           OrderCount = orderGroup.Count()

       });


   foreach (var order in query)

   {

       Console.WriteLine("CustomerID: {0}  Orders Count: {1}",

           order.CustomerID,

           order.OrderCount);

   }

}


示例


下面的示例对 Contact 和 SalesOrderHeader 表执行 GroupJoin 以查找每个联系人的订单数。 将显示每个联系人的订单数和 ID。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   ObjectSet<Contact> contacts = context.Contacts;

   ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;


   var query = contacts.GroupJoin(orders,

       contact => contact.ContactID,

       order => order.Contact.ContactID,

       (contact, contactGroup) => new

       {

           ContactID = contact.ContactID,

           OrderCount = contactGroup.Count(),

           Orders = contactGroup

       });


   foreach (var group in query)

   {

       Console.WriteLine("ContactID: {0}", group.ContactID);

       Console.WriteLine("Order count: {0}", group.OrderCount);

       foreach (var orderInfo in group.Orders)

       {

           Console.WriteLine("   Sale ID: {0}", orderInfo.SalesOrderID);

       }

       Console.WriteLine("");

   }

   }


联接

示例


以下示例针对 Contact 表和 SalesOrderHeader 表执行联接。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   ObjectSet<Contact> contacts = context.Contacts;

   ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;


   var query =

       contacts.Join(

           orders,

           order => order.ContactID,

           contact => contact.Contact.ContactID,

           (contact, order) => new

           {

               ContactID = contact.ContactID,

               SalesOrderID = order.SalesOrderID,

               FirstName = contact.FirstName,

               Lastname = contact.LastName,

               TotalDue = order.TotalDue

           });


   foreach (var contact_order in query)

   {

       Console.WriteLine("ContactID: {0} "

                       + "SalesOrderID: {1} "

                       + "FirstName: {2} "

                       + "Lastname: {3} "

                       + "TotalDue: {4}",

           contact_order.ContactID,

           contact_order.SalesOrderID,

           contact_order.FirstName,

           contact_order.Lastname,

           contact_order.TotalDue);

   }

}


示例


以下示例针对 Contact 表和 SalesOrderHeader 表执行联接,同时按联系人 ID 对结果分组。

C#


using (AdventureWorksEntities context = new AdventureWorksEntities())

{

   ObjectSet<Contact> contacts = context.Contacts;

   ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;


   var query = contacts.Join(

       orders,

       order => order.ContactID,

       contact => contact.Contact.ContactID,

       (contact, order) => new

       {

           ContactID = contact.ContactID,

           SalesOrderID = order.SalesOrderID,

           FirstName = contact.FirstName,

           Lastname = contact.LastName,

           TotalDue = order.TotalDue

       })

           .GroupBy(record => record.ContactID);


   foreach (var group in query)

   {

       foreach (var contact_order in group)

       {

           Console.WriteLine("ContactID: {0} "

                           + "SalesOrderID: {1} "

                           + "FirstName: {2} "

                           + "Lastname: {3} "

                           + "TotalDue: {4}",

               contact_order.ContactID,

               contact_order.SalesOrderID,

               contact_order.FirstName,

               contact_order.Lastname,

               contact_order.TotalDue);

       }

   }

}


请参阅


   LINQ to Entities 中的查询


版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:如何使用 First 方法通过使用基于方法的查询语法来查询-元素运算符 | ·下一条:如何使用 ToArray ToDictionary 和 ToList 方法-转换

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

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