Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询发生日期_C#_Linq - Fatal编程技术网

C# 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查询转换为LINQ查询

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]