繁体   English   中英

用于内部联接选择的C#LINQ Lambda表达式

[英]C# LINQ Lambda Expression for Inner Join Select

我是LINQLambda的新手,正在尝试执行以下查询:

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM