[英]C# LINQ Lambda Expression for Inner Join Select
我是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 Core Web应用程序与.net Core Framework结合使用 。 我已经声明了dbContext
并且能够单独查询两个表。 我只是不知道如何获取联接的结果,并在每次尝试时都不断获取Argument Null Exception 。
我做了几次尝试,但无法正常工作。
用我的尝试之一来完成更新
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(...)。Where(...)。Select(...)进行了几次尝试,结果相同。
看看MSDN文章
他们给出了内部联接的示例,如下所示:
var innerJoinQuery =
from category in categories
join prod in products on category.ID equals prod.CategoryID
select new { ProductName = prod.Name, Category = category.Name }; //produces flat sequence
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.