Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Agregate计数中的DISTINCT转换为LINQ_C#_Sql_Linq_Distinct - Fatal编程技术网

C# 将Agregate计数中的DISTINCT转换为LINQ

C# 将Agregate计数中的DISTINCT转换为LINQ,c#,sql,linq,distinct,C#,Sql,Linq,Distinct,我正在使用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无法转换为LI

我正在使用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

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

更改sql选择,如下所示:

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
 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
}
Linqer中的输出将如下所示:

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
 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
}