[英]Unable to translate SQL query to LINQ using EF
我有一個在 SQL 中的查詢如下所示:
SELECT *
FROM ORDERS o, CUSTOMERS c
WHERE
(several conditions)
AND o.NUMBER NOT IN
(SELECT o.NUMBER
FROM ORDERS o, CUSTOMERS c
WHERE
(exactly the same conditions as above)
GROUP BY o.NUMBER
HAVING COUNT(*) > 1)
我在 LINQ 中執行此操作的嘗試返回的結果與 SQL 查詢不同。 這就是我正在做的:
var query = (from o in context.ORDERS
from c in context.CUSTOMERS
where (bunch of conditions) &&
(from o in context.ORDERS
from c in context.CUSTOMERS
where (bunch of conditions)
group o by o.NUMBER into grp
where grp.Count() > 1
select grp.Key).Contains(o.NUMBER) == false
select new { o, c }).ToList();
我想知道的是:
你給出的查詢應該完全一樣,所以我懷疑你的條件翻譯不好。 很可能是區分大小寫或可空性錯誤。
您正在執行矩陣連接(或笛卡爾連接),然后使用 where 子句進行過濾。 您應該使用“on”子句將其轉換為適當的連接(您的原始 SQL 也應該這樣做,但它沒有)。 由於您沒有提供 where 條件,我無法幫助您,但無論如何這里是一個半優化版本:
var query = (from o in context.ORDERS
from c in context.CUSTOMERS
where (bunch of conditions)
group new {o,c} by o.NUMBER into grp
where grp.Count() == 1
select grp)
.SelectMany(x=>x)
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.