我正在尝试学习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的方法吗?
答案 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
};``