LINQ

时间:2015-08-26 03:17:02

标签: c# linq join

我正在尝试学习LINQ并且一直在玩一些查询。以下LINQ查询正在使用Northwind数据库。以下显示了正在使用的字段(客户订购的产品)

客户(CustID,CompanyName)

订单(OrderID,CustomerID)

OrderDetails(OrderID,ProductID)

产品(ProductiAD,ProductName)

查询语法:

from c in Customers
               join o in Orders on c.Custid equals o.Custid
               join od in OrderDetails on o.Orderid equals od.Orderid
               join p in Products on od.Productid equals p.Productid
               select new 
               {
                    Order = od.Orderid,
                    Company = c.Companyname,
                    Product = p.Productname
               };

流利语法:

Customers.Join(Orders, c=> c.CustomerID, o=> o.CustomerID, (c,o) => new {c, o} )
                   .Join(OrderDetails, co => co.o.OrderID, od => od.OrderID, (co, od) => new {co, od})
                   .Join(Products, cood => cood.od.ProductID, p => p.ProductID, (cood, p) => new {cood, p})
                   .Select (a => new
                   {
                        OrderNo = a.cood.co.o.OrderID,
                        Company = a.cood.co.c.CompanyName,
                        Product = a.p.ProductName

                   });

虽然这些都有效但我怀疑我在SQL中思考的太多而不是LINQ。我一直在阅读有更好的方法来连接表,但我不确定最好的方法是使用多个表。任何人都可以向我展示更多类似LINQ的方法吗?

3 个答案:

答案 0 :(得分:0)

考虑SQL而不是LINQ。我想说当你有对象集合并且想要从 LINQ 获取数据时,它将是一个很好的工具,而加入表 SQL 仍然是一个更好的主意,而LINQ通过添加类似于SQL语句的查询表达式来扩展语言,并且可以用于方便地从数组,可枚举类,XML文档,关系数据库和第三方中提取和处理数据。党的数据来源。

答案 1 :(得分:0)

假设您已经告诉EntityFramework关于您的数据库架构和关系,您真的应该能够写下这个:

Products.Select(p => {
    Product = p.ProductName,
    Company = p.OrderDetails.Order.Customer.CompanyName,
    OrderNo = p.OrderDetails.Order.OrderID
});

答案 2 :(得分:0)

 var result = from s in db.Speakers
                     join
                         c in db.Conferences on s.ConferenceId equals c.ConferenceId 
                        where  c.ConferenceId == id 
                     select new
                     {
                         s.SpeakerName,
                         c.MeetingTitle,
                         c.ImgUrl,
                         c.Enddate,
                         c.StartDate,
                         c.Conferenceroom,
                         c.ConferenceId
                     };``