如何为此编写 linq 查询
本文关键字:linq 查询 | 更新日期: 2023-09-27 18:33:51
>我需要在Linq to SQL中编写以下查询,但不确定最好的方法是什么,因为它有两个派生表。任何建议。
SELECT A.ID
FROM
(
SELECT *
FROM Orders
WHERE ProductID = 5
) A
JOIN
(
SELECT CustomerID, MAX(Price) Price
FROM Orders
WHERE ProductID = 5
GROUP BY CustomerID
) B
ON A.CustomerID = B.CustomerID and A.Price = B.Price
var b = (
from o in db.Orders
where o.ProductID == 5
group o by o.CustomerID into og
select new {
CustomerID = og.Key
Price = Max(og.Price)
}
);
var a = (
from o in db.Orders
join p in b on new {a.CustomerID, a.Price} equals
new {b.CustomerID, b.Price}
where o.ProductID == 5
select a.ID
);
var r = a.ToString();
在形成这样的东西时,这两个链接是非常宝贵的:
- http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
- http://msdn.microsoft.com/en-us/vstudio/bb688085
您能否使用 LINQ 简化此操作,尤其是在使用方法语法而不是查询语法时。
orders.Where(o => o.ProductID == 5)
.GroupBy(o => o.CustomerID)
.SelectMany(g => g.Where(o => o.Price == g.Max(m => m.Price)));
我在编写 LINQ 时的建议是,不要简单地尝试精确地转换 SQL 语句。 考虑所需的结果并开发专为 LINQ 设计的解决方案。
大致如下:
var result = from a in context.Orders
join b in (context.Orders.Where(o => o.ProductID == 5).GroupBy(o => o.CustomerID).Select(g => new { CustomerID = g.Key, Price = g.Max(o => o.Price)))
on new {a.CustomerID, a.Price} equals new {b.CustomerID, b.Price}
where a.ProductID == 5
select a.ID;