比较日期linq c#

时间:2017-11-13 20:14:51

标签: c# linq tsql xamarin ssms

如果存在日期,我似乎无法查询数据库。请帮忙。

 DateTime value = new DateTime(2018, 10, 26);
 item = await table.Where(todoItem => todoItem.Date == value.date)
                   .ToListAsync();

我认为c#编写日期和SQL的格式不同,因此无法找到匹配项。此外,数据库正确链接到应用程序,因为我能够查询同一个表中的其他行。

3 个答案:

答案 0 :(得分:3)

如前所述,这可能是因为数据库中的DateTime列包含时间信息。

重写您的查询:

DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => todoItem.Date >= value &&
                                     todoItem.Date < value.AddDays(1))
                   .ToListAsync();

这将检索属于指定范围的所有记录(即与给定日期匹配的日期,DBMS将能够使用可能在日期列上定义的索引。

答案 1 :(得分:0)

与Brandon的答案类似......由于todoItem.Date包括Date属性的时间部分,很可能会发生这种情况。

假设属性Date的类型为DateTime,因此您可以这样做:

DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => DbFunctions.TruncateTime(todoItem.Date) == 
  value).ToListAsync();
  

<强> DbFunctions.TruncateTime

     

当用作LINQ to Entities查询的一部分时,此方法调用规范的TruncateTime EDM函数返回给定日期并清除时间部分。

以下是有关DbFunctions.TruncateTime的更多信息。

请告诉我这是否有帮助!

答案 2 :(得分:-1)

这很可能是因为在日期中包含时间,而不是将它们格式化为实际日期字符串。您可以使用.toLocaleString()方法解决此问题。这样的事情应该有效:

DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => todoItem.Date.toLocaleString() == 
  value.date.toLocaleString())
  .ToListAsync();