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

时间:2016-12-07 06:11:38

标签: c# asp.net entity-framework linq lambda

我是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

我正在使用 .net核心框架 ASP.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(...)进行了多次尝试。其中(...)。选择(...)具有相同的结果。

1 个答案:

答案 0 :(得分:0)

查看MSDN Article

他们给出了一个像这样的内连接的例子:

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
相关问题