Entity framework 具有GROUP BY、LINQ语法中的HAVING和COUNT的T-SQL

Entity framework 具有GROUP BY、LINQ语法中的HAVING和COUNT的T-SQL,entity-framework,linq,tsql,linq-to-sql,Entity Framework,Linq,Tsql,Linq To Sql,我正在努力将T-SQL查询转换为LINQ语法 在T-SQL中,查询如下所示: 将失败的文件作为 选择1作为文件存在 来自[FileHistory]f f.UerId=u.UserId上的内部联接[Users]u 按f.FileName分组 当1/*Success*/然后1 ELSE 0 END=1时使用SUMCASE f.FileState 从失败的文件中选择COUNT1 如果在将上面的T-SQL转换为LINQ时遇到严重问题,无论是查询语法还是方法语法。有人能告诉我LINQ查询的正确顺序和嵌套应

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

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

将失败的文件作为 选择1作为文件存在 来自[FileHistory]f f.UerId=u.UserId上的内部联接[Users]u 按f.FileName分组 当1/*Success*/然后1 ELSE 0 END=1时使用SUMCASE f.FileState 从失败的文件中选择COUNT1 如果在将上面的T-SQL转换为LINQ时遇到严重问题,无论是查询语法还是方法语法。有人能告诉我LINQ查询的正确顺序和嵌套应该是什么样子吗

查询的实际功能:


我有一个文件历史记录表,其中包含单个文件的多个条目。需要知道总共有多少失败的文件。意味着文件从未成功处理过状态1,并且至少处理过一次错误状态2。单个文件按文件名分组。查询结果是一个单一的数字。

下面的查询理论上应该可以工作。但它可能会失败,具体取决于实体框架的版本和提供者

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();

下面的查询在理论上应该是可行的。但它可能会失败,具体取决于实体框架的版本和提供者

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();

哦,这看起来比我所有失败的尝试要容易得多。然而,它永远不会成功。这个查询非常有效。由于编译器的警告,我可以用任意值替换计数。谢谢!哦,这看起来比我所有失败的尝试要容易得多。然而,它永远不会成功。这个查询非常有效。由于编译器的警告,我可以用任意值替换计数。谢谢!