我正在努力将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查询的正确顺序和嵌套应该是什么样吗?
查询实际上做什么:
我有一个文件历史记录表,其中包含单个文件的多个条目。需要知道总共有多少failed个文件。意味着文件从未成功地处理过(状态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();