我是新來LINQ
和LAMBDA,並試圖做這樣的事情查詢:C#LINQ Lambda表達式選擇
SELECT p.*,o.QTYSUM FROM Database1..Table1 p
INNER JOIN (
SELECT ISNULL(Sum(i.QTY),0) as QTYSUM,i.SKU
FROM Database2..Table2 i
WHERE i.LOCATION in ('Location1','Location2')
GROUP BY i.SKU) o on o.SKU=p.SKU
where o.QTYSUM>0
我使用ASP.net核心 Web應用程序與.net核心框架。我已經聲明瞭dbContext
,並且能夠分別單獨查詢兩個表。我只是無法弄清楚如何獲得加入的結果,並且每次嘗試時都會收到參數無例外。
我已經做了幾次嘗試,無法讓它工作。
更新與我改掉的1來完成這個
from p in _DB1context.Table1
join i in
(from i in _DB2context.Table2
where i.Location == "Location1" || i.Location == "Location2"
group i by i.SKU into mygroup
select new {
SKU = mygroup.First().SKU,
QtySum = mygroup.Sum(y => y.Qty) }
) on p.SKU equals i.SKU
where i.QtySum > 0
select new {
pgroup = p,
SKU= p.SKU,
QtySum= i.QtySum
};
我儘快得到的錯誤,因爲我跑在這個ToList,我知道我可以解決這個問題通過創建一個存儲過程,做我的SQL,只是運行_context.table1.FromSql(「Exec my_Stored_Procedure」),但我真的想學習LINQ,一旦我知道我錯在哪裏,它會幫助我更好地理解這一點。 我也用_DB1context.Table1.Join(...)做了幾次嘗試,其中(...)。選擇(...)具有相同的結果。
我們不是寫你的代碼你。你試過什麼了? – RandomStranger
糾正,顯然是SO已經變成你的代碼寫作服務。 – RandomStranger
你現在得到什麼錯誤?我可以看到的一件事是你可以使用'SKU = mygroup.Key'而不是'SKU = mygroup.First()。SKU'。我會注意到EF不會將跨上下文的連接轉換爲引用多個數據庫的SQL查詢。爲此,您需要一個存儲過程(或直接傳遞SQL查詢)。 –