【问题标题】:Convert DISTINCT in Agregate COUNT to LINQ将聚合 COUNT 中的 DISTINCT 转换为 LINQ
【发布时间】:2017-03-08 05:27:33
【问题描述】:

我正在使用 Linqer 将以下 SQL 转换为 LINQ

SELECT CC.col1,CC.col2,CC.col3 FROM dbo.Table1 CC
WHERE CC.Status IN (0,3) AND CC.col4 IN (2,3,4,5)
GROUP BY CC.col1,CC.col2,CC.col3
HAVING COUNT(DISTINCT CC.Status) = 2

但它显示以下错误

SQL 无法转换为 LINQ:Agregate COUNT 中的 DISTINCT 无法转换为 LINQ

【问题讨论】:

    标签: c# sql linq distinct


    【解决方案1】:

    改变sql select如下:

    SELECT CC.col1,CC.col2,CC.col3 FROM dbo.Table1 CC
    WHERE CC.Status IN (0,3) AND CC.col4 IN (2,3,4,5)
    GROUP BY CC.col1,CC.col2,CC.col3
    HAVING (select  COUNT(DISTINCT CC.Status) FROM dbo.Table1 CC) = 2
    

    Linqer 中的输出如下所示:

     from CC in db.Table1
      where
     (new int[] {0, 3 }).Contains(CC.Status) &&
     (new int[] {2, 3, 4, 5 }).Contains(CC.col4)
     group CC by new {
       CC.col1,
       CC.col2,
       CC.col3
     } into g
     where
     ((from Table1 in db.Table1
     select new {
      g.Key.Status
    }).Distinct()).Count(p => g.Key.Status != null) == 2
     select new {
       g.Key.col1,
       g.Key.col2,
       g.Key.col3
    }
    

    【讨论】:

      【解决方案2】:

      在最后一个子句COUNT(DISTINCT CC.Status) 中的这一部分转换失败。如果您删除 DISTINCT 它可能能够转换 SQL。在您看到它执行Status.Count() 的部分中,将其更改为Status.Distinct().Count(),您应该会很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 2020-03-13
        • 2019-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多