【问题标题】:How to convert sql to LINQ combine LEFT JOIN, WHERE, GROUP BY and SUM in LINQ?如何将 sql 转换为 LINQ 在 LINQ 中结合 LEFT JOIN、WHERE、GROUP BY 和 SUM?
【发布时间】:2021-05-03 23:29:16
【问题描述】:

我的sql查询:

SELECT 
    a.`ItemCode`, a.`UnitCost`, a.`UOM`, a.`Description`,
    SUM(b.QtyIN) AS 'Total', a.`UnitCost` AS 'Adjusted cost' 
FROM 
    stk_master AS a 
LEFT JOIN 
    (SELECT * 
     FROM stk_detail_trn_in 
     WHERE `LocationCode` = 'PGV001' 
       AND `DocType3` = 'OS-NSI') AS b ON a.`ItemCode` = b.`ItemCode` 
GROUP BY 
    a.`ItemCode`;

这是 LINQ 查询:

var data = (from e in master
            join d in stockIn on e.ItemCode equals d.ItemCode into table1
            from d in table1.DefaultIfEmpty()
            where d.LocationCode == id && d.DocType3 == "OS-NSI"
            select new ViewModelListInventory
                    {
                        stk_master = e,
                        stk_detail_trn_in = d,
                    })
        .GroupBy(x => x.stk_detail_trn_in.ItemCode) 
        .Select(d => new stk_detail_trn_in { QtyIN = d.Sum(x => x.stk_detail_trn_in.QtyIN)})
        .ToList();

【问题讨论】:

  • 请提供您的 SQL 查询以进行检查。目前还不清楚。请更新您的问题。 :)
  • 这是我的 sql 查询: SELECT a.ItemCode,a.UnitCost,a.UOM,a.Description,SUM(b.QtyIN) AS 'Total', a.UnitCostAS 'Adjusted cost' FROM stk_master 作为 LEFT JOIN (SELECT * FROM stk_detail_trn_in WHERELocationCode= 'PGV001' ANDDocType3 = 'OS-NSI') AS b ON a.ItemCode = b.ItemCode GROUP BY a.ItemCode;
  • 好的。让我检查一下。
  • 你有问题group by。您正在尝试使用一列进行分组,但在选择部分中,您有 a.UnitCost, a.UOM, a.Description,a.UnitCost AS 'Adjusted cost' 这可能在 sql server 中不起作用.请更正您的 SQL。 :)
  • 如上所述这是无效的SQL,所以转换成LINQ没有意义。

标签: c# sql linq


【解决方案1】:

类似这样的:

var query = 
   from e in master
   join d in stockIn.Where(d => d.LocationCode == id && d.DocType3 == "OS-NSI") on e.ItemCode equals d.ItemCode into table1
   from d in table1.DefaultIfEmpty()
   group d by new { e.ItemCode } into g
   select new 
   {
       g.Key.ItemCode,
       Total = g.Sum(x => x.QtyIN)
   };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2015-04-26
    • 2021-09-17
    相关资源
    最近更新 更多