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();
我正在努力将 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();