Linq查询没有获取记录

时间:2018-04-04 04:22:15

标签: c# sql linq

我需要从SQL表中获取记录,我可以在SQL查询中获取数据,但不能在LINQ中获取。

我的SQL查询是:

select sum(datediff(Day,2018-04-31,2018-04-30)) as dd 
  from lms03192018.dbo.LeaveRequestModels 
 where leaveTypeId = '1'  
       and requestUserId = '5dc64ba7-8cf8-45dd-80f2-a8700e7dad2e' 
       and FromDate = '2018-04-30'

它给了我结果:1。

我想从LINQ获得相同的结果,但是我必须使用变量和视图模型日期值而不是硬代码日期。以下是我尝试过的代码:

var month = new DateTime (userInputDate.Year, userInputDate.Month , 1);
                          var last = month.AddMonths(1).AddDays(-1);
                          var nextmonth = month.AddMonths(1);

var diffMonthLeavesCount = leaveApprovedList
                              .Where(x => x.leaveTypeId == leaveTypeId 
                                          && x.requestUserId == person.Id 
                                          && x.FromDate.Month == userInputDate.Month 
                                          && x.ToDate.Month == nextmonth.Month)
                              .Select(x => SqlMethods.DateDiffDay(last,x.FromDate))
                              .Sum();

2 个答案:

答案 0 :(得分:2)

我不知道为什么你的c#代码使用了Month比较,我忽略了它:

dotnet publish

我对日期进行了硬编码以便于理解(在代码中替换它们)。 此外,您需要将它们替换为您的实际参数:person.Id,userInputDate ..

答案 1 :(得分:-1)

似乎比较的不同,如tchelidze的评论中所述

在你的SQL中你有3个比较。

leaveTypeId = '1'  
requestUserId = '5dc64ba7-8cf8-45dd-80f2-a8700e7dad2e' 
FromDate = '2018-04-30'

在你的linq中你有4个比较。

x.leaveTypeId == leaveTypeId //Assuming leaveTypeId ==1

x.requestUserId == person.Id  //Assuming person.Id == '5dc64ba7-8cf8-45dd-80f2-a8700e7dad2e' 

x.FromDate.Month == userInputDate.Month  //This compares month (int) instead of the date (DateTime) from sql

x.ToDate.Month == nextmonth.Month  //This does not exists in the sql compares month (int) as well