C# LINQ查询发生日期
我需要将此SQL查询转换为LINQ查询C# LINQ查询发生日期,c#,linq,C#,Linq,我需要将此SQL查询转换为LINQ查询 SQL: SELECT Name, Date, NextDate, DATEDIFF("D", Date, NextDate) FROM ( SELECT Name, Date, ( SELECT MIN(Date) FROM DailyJ
SQL:
SELECT Name,
Date,
NextDate,
DATEDIFF("D", Date, NextDate)
FROM ( SELECT Name,
Date,
( SELECT MIN(Date)
FROM DailyJobCount T2
WHERE T2.Name = T1.Name
AND T2.Date > T1.Date AND T2.id ='NOT RUN' AND T1.id ='NOT RUN'
) AS NextDate
FROM DailyJobCount T1
) AS T
where Date >= '03-03-2015' and Date <='03-03-2016'
group by T.Name, Date,NextDate
我试过
var deviation = (from record in _db.DailyJobCount
where
record.Date >= StartTime && record.Date <= EndTime && record.IsActive.Equals(true) &&
record.jobid == "NOT RUN"
group new {record} by new
{
record.Name, record.Date
}
into rec
select new
{
Name = rec.Key.Name,
Diff = SqlFunctions.DateDiff("day",StartTime, NextDate ),
}
);
但它在NextDate中给出了错误,并且它不是完整的LINQ查询。我真的不知道。你能建议一下吗?谢谢你的帮助
谢谢您可以尝试此变体: 林克: T-SQL:
在sql中,它会自动将NextDate作为一个函数,但如何使用LINQI中的NextDate多次更改了我的答案,请检查最新的答案,并将您的sql脚本与我的进行比较。我尝试在空表上执行此查询,没有错误。您在哪一行有错误?此处NextDate不是列名。我们必须把下一个日期作为动态日期。为了找到值的下一个日期,我第一次犯了一个错误,现在检查我最近的解决方案-下一个日期是按照您所说的方式计算的:下一个日期=subGroup.Minx=>x.item2.DateGREAT!!,谢谢,很好用。我还有一个疑问。如何从diff中获取值?
var dateFrom = new DateTime(2015, 03, 03);
var dateTo = new DateTime(2016, 03, 03);
var id = "NOT RUN";
var query = from item1 in _db.DailyJobCounts
where item1.Date >= dateFrom && item1.Date <= dateTo
from item2 in _db.DailyJobCounts
where item1.Name == item2.Name && item1.Date < item2.Date && item1.id == id && item2.Name == id
group new { item1, item2 } by new { item1.Name, item1.Date } into subGroup
select new
{
subGroup.Key.Name,
subGroup.Key.Date,
NextDate = subGroup.Min(x => x.item2.Date),
} into result
select new
{
result.Name,
result.Date,
result.NextDate,
Diff = SqlFunctions.DateDiff("day", result.Date, result.NextDate),
};
var answer = query.ToList();
SELECT
1 AS [C1],
[GroupBy1].[K2] AS [Name],
[GroupBy1].[K1] AS [Date],
[GroupBy1].[A1] AS [C2],
DATEDIFF(day, [GroupBy1].[K1], [GroupBy1].[A1]) AS [C3]
FROM ( SELECT
[Extent1].[Date] AS [K1],
[Extent1].[Name] AS [K2],
MIN([Extent2].[Date]) AS [A1]
FROM [dbo].[DailyJobCounts] AS [Extent1]
INNER JOIN [dbo].[DailyJobCounts] AS [Extent2] ON ([Extent1].[Name] = [Extent2].[Name]) OR (([Extent1].[Name] IS NULL) AND ([Extent2].[Name] IS NULL))
WHERE ([Extent1].[Date] >= 03.03.2015 0:00:00) AND ([Extent1].[Date] <= 03.03.2016 0:00:00) AND ([Extent1].[Date] < [Extent2].[Date]) AND ([Extent1].[id] = 'NOT RUN') AND (([Extent2].[Name] = 'NOT RUN') OR (([Extent2].[Name] IS NULL) AND ('NOT RUN' IS NULL)))
GROUP BY [Extent1].[Date], [Extent1].[Name]
) AS [GroupBy1]