我需要从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();
答案 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