首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Agregate计数中的DISTINCT转换为LINQ

将Agregate计数中的DISTINCT转换为LINQ
EN

Stack Overflow用户
提问于 2017-03-08 05:27:33
回答 2查看 109关注 0票数 1

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

代码语言:javascript
复制
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计数中的DISTINCT不能转换为LINQ

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-08 06:36:26

按照以下方式更改sql选择:

代码语言:javascript
复制
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中的输出如下所示:

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2017-03-08 06:01:31

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42663641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档