T-SQL 在 LINQ 语法中使用 GROUP BY、HAVING 和 COUNT

T-SQL with GROUP BY, HAVING and COUNT in LINQ syntax

我正在努力将 T-SQL 查询转换为 LINQ 语法。

在 T-SQL 中,查询如下所示:

WITH FailedFiles AS 
(
  SELECT 1 AS FileExists
  FROM [FileHistory] f
  INNER JOIN [Users] u ON f.UerId = u.UserId
  GROUP by f.FileName
  HAVING SUM(CASE f.FileState WHEN 1 /*Success*/ THEN 1 ELSE 0 END) <= 0 
    AND SUM(CASE f.FileState WHEN 2 /*Failed*/ THEN 1 ELSE 0 END) >= 1
) 
SELECT COUNT(1) from FailedFiles

在将上面的 T-SQL 转换为 LINQ 时遇到严重问题(不管是查询语法还是方法语法)。有人可以提示我 LINQ 查询的正确顺序和嵌套应该是什么样子吗?

查询的实际作用:

我有一个文件历史记录 table,单个文件有多个条目。需要知道总共有多少 failed 个文件。这意味着文件从未成功处理(状态 1)并且至少处理过一次并出现错误(状态 2)。单个文件按文件名分组。查询结果为单个数字

以下查询在理论上应该有效。但它可能会失败,具体取决于 Entity Framework 和 Provider 的版本。

var count =  (from f in context.FileHistory
              join u in context.User on f.UserId equals u.UserId
              select f)
              .GroupBy(f=> f.FileName)
              .Where(g=> 
                       g.Count(i=> i.FileState == 1) <=0  &&
                       g.Count(i=> i.FileState == 2) >=1 ).Count();