【问题标题】:Relatively simple SQL query to Linq (with grouping)对 Linq 的相对简单的 SQL 查询(带分组)
【发布时间】:2016-01-25 21:52:19
【问题描述】:

我有一条 sql 语句需要修改为任何正确形式的 Linq(查询语法和/或 lambda)——任何想法都将不胜感激:

SELECT DISTINCT
    CUSTOMER_NUM, CUSTOMER_NAME, 
    COUNT(*) AS 'COUNT',
    SUM(CASE WHEN State = 'State1' THEN 1 ELSE 0 END) AS 'State1Count',
    SUM(CASE WHEN State = 'State2' THEN 1 ELSE 0 END) AS 'State2Count',
    ISNULL(SUM(USD_TOTAL_MRC_AMT), 0) AS 'USD_TOTAL_MRC_AMT_SUM'        
FROM Table1
WHERE
 (
    USERID = @UserId   //@UserId is a parameter passed into the stored procedure
)
GROUP BY CUSTOMER_NUM, CUSTOMER_NAME
ORDER BY
    CUSTOMER_NAME

以下是我迄今为止在 LinqPad 中所做的工作:

Table1.GroupBy(i => 1).Select(g => new { 
Total = g.Count(i => i.State == "AM Re-Rate Pool" || i.State == "AM Renewal Pool"),
ReRates = g.Count(i => i.State == "State1"),
Renewals = g.Count(i => i.State == "State2
});

谢谢!

【问题讨论】:

  • 您对哪一部分有问题?
  • 仅供参考,它被称为方法语法,而不是 lambda。
  • 尚未成功添加到分组中的 CUSTOMER_NUM 和 CUSTOMER_NAME
  • 结果应如下所示:CUSTOMER_NAME CUSTOMER_NUMBER, TOTAL, State1, State2 john doe 3 10 2 8 jane doe 4 15 5 10

标签: c# .net sql-server linq


【解决方案1】:

这是我使用方法语法的方法。

Table1.Where(t => t.UserId = userId)
      .OrderBy(t => t.CustomerName)
      .GroupBy(t => new {t.Customer_Num, t.Customer_Name})
      .Select(grp => new
      {
          grp.Key.Customer_Num,
          grp.Key.Customer_Name,
          Count = grp.Count(),
          State1Count = grp.Where(t => t.State = "State1").Count(),
          State2Count = grp.Where(t => t.State = "State2").Count(),
          USD_TOTAL_MRC_AMT_SUM = grp.Sum(t => t.USD_TOTAL_MRC_AMT_SUM) ?? 0
      })
      .Distinct();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    相关资源
    最近更新 更多