[英]Nullable-How to compare only Date without Time in DateTime types in C#?
[英]How to compare only Date without Time in DateTime types in Linq to SQL with Entity Framework?
有没有办法比较Linq2Sql
中的两个DateTime
变量但忽略时间部分。
该应用程序将项目存储在数据库中并添加发布日期。 我想保持准确的时间,但仍然能够按日期计算。
我想比较12/3/89 12:43:34
和12/3/89 11:22:12
并让它忽略一天中的实际时间,因此这两个被认为是相同的。
我想我可以在比较之前将一天中的所有时间设置为00:00:00
,但实际上我确实想知道一天中的时间,我也只想按日期进行比较。
我发现了一些具有相同问题的代码,它们分别比较年、月和日。 有一个更好的方法吗?
尝试使用DateTime
对象上的Date
属性...
if(dtOne.Date == dtTwo.Date)
....
要进行真正的比较,您可以使用:
dateTime1.Date.CompareTo(dateTime2.Date);
这就是我为了与 LINQ 一起工作而这样做的方式。
DateTime date_time_to_compare = DateTime.Now;
//Compare only date parts
context.YourObject.FirstOrDefault(r =>
EntityFunctions.TruncateTime(r.date) == EntityFunctions.TruncateTime(date_to_compare));
如果您只使用dtOne.Date == dtTwo.Date
则它dtOne.Date == dtTwo.Date
用于 LINQ(错误:LINQ to Entities 不支持指定的类型成员“Date”)
如果您使用的是实体框架 < v6.0,则使用EntityFunctions.TruncateTime
如果您使用的是实体框架 >= v6.0,则使用DbFunctions.TruncateTime
围绕要在 Linq 查询中使用的任何DateTime
类属性使用(基于您的 EF 版本)
例子
var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate)
>= DbFunctions.TruncateTime(DateTime.UtcNow));
DateTime dt1 = DateTime.Now.Date;
DateTime dt2 = Convert.ToDateTime(TextBox4.Text.Trim()).Date;
if (dt1 >= dt2)
{
MessageBox.Show("Valid Date");
}
else
{
MessageBox.Show("Invalid Date... Please Give Correct Date....");
}
DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}
如果您使用可为空的 DateFields,则可以使用它。
DateTime dt1=DateTime.ParseExact(date1,"dd-MM-yyyy",null);
DateTime dt2=DateTime.ParseExact(date2,"dd-MM-yyyy",null);
int cmp=dt1.CompareTo(dt2);
if(cmp>0) {
// date1 is greater means date1 is comes after date2
} else if(cmp<0) {
// date2 is greater means date1 is comes after date1
} else {
// date1 is same as date2
}
DateTime econvertedDate = Convert.ToDateTime(end_date);
DateTime sconvertedDate = Convert.ToDateTime(start_date);
TimeSpan age = econvertedDate.Subtract(sconvertedDate);
Int32 diff = Convert.ToInt32(age.TotalDays);
diff 值表示年龄的天数。 如果值为负,则开始日期晚于结束日期。 这是一个很好的检查。
您可以使用Equals或CompareTo 。
Equals :返回一个值,该值指示两个DateTime实例是否具有相同的日期和时间值。
比较返回值:
日期时间可以为空:
DateTime? first = new DateTime(1992,02,02,20,50,1);
DateTime? second = new DateTime(1992, 02, 02, 20, 50, 2);
if (first.Value.Date.Equals(second.Value.Date))
{
Console.WriteLine("Equal");
}
要么
DateTime? first = new DateTime(1992,02,02,20,50,1);
DateTime? second = new DateTime(1992, 02, 02, 20, 50, 2);
var compare = first.Value.Date.CompareTo(second.Value.Date);
switch (compare)
{
case 1:
Console.WriteLine("this instance is later than value.");
break;
case 0:
Console.WriteLine("this instance is the same as value.");
break;
default:
Console.WriteLine("this instance is earlier than value.");
break;
}
日期时间不可为空:
DateTime first = new DateTime(1992,02,02,20,50,1);
DateTime second = new DateTime(1992, 02, 02, 20, 50, 2);
if (first.Date.Equals(second.Date))
{
Console.WriteLine("Equal");
}
要么
DateTime first = new DateTime(1992,02,02,20,50,1);
DateTime second = new DateTime(1992, 02, 02, 20, 50, 2);
var compare = first.Date.CompareTo(second.Date);
switch (compare)
{
case 1:
Console.WriteLine("this instance is later than value.");
break;
case 0:
Console.WriteLine("this instance is the same as value.");
break;
default:
Console.WriteLine("this instance is earlier than value.");
break;
}
你可以试试
if(dtOne.Year == dtTwo.Year && dtOne.Month == dtTwo.Month && dtOne.Day == dtTwo.Day)
....
在.NET 5 中:
要在没有时间的情况下比较日期,您必须使用EF.Functions.DateDiffDay()
否则您将在代码中进行比较,这意味着您可能从数据库中提取的数据比您需要的多。
.Where(x => EF.Functions.DateDiffDay(x.ReceiptDate, value) == 0);
在 join 或 where 子句中,使用列的Date
属性。 在幕后,这会执行CONVERT(DATE, <expression>)
操作。 这应该允许您比较没有时间的日期。
对于那些在 EF 6 中使用查询综合语法和 2019 方法的人:
from obj in _context.Object
where DbFunctions.TruncateTime(obj.datetimeField) == DbFunctions.TruncateTime(dateTimeVar)
select obj
).ToList();
我知道这个问题很老,但最好这样说:
使用
数据库函数
在 ASP.NET CORE 中必须创建一个 object。
var DbF = Microsoft.EntityFrameworkCore.EF.Functions;
现在您可以轻松使用它了。
var now = DateTime.Now;
int count = db.Tbl.Count(w => DbF.DateDiffDay(now, w.RegisterDate) <= 3);
var date2 = DateTime.Now;
_context.table.Where(x => x.date1.ToString("dd/MM/yyyy").Equals(date2.ToString("dd/MM/yyyy")));
int o1 = date1.IndexOf("-");
int o2 = date1.IndexOf("-",o1 + 1);
string str11 = date1.Substring(0,o1);
string str12 = date1.Substring(o1 + 1, o2 - o1 - 1);
string str13 = date1.Substring(o2 + 1);
int o21 = date2.IndexOf("-");
int o22 = date2.IndexOf("-", o1 + 1);
string str21 = date2.Substring(0, o1);
string str22 = date2.Substring(o1 + 1, o2 - o1 - 1);
string str23 = date2.Substring(o2 + 1);
if (Convert.ToInt32(str11) > Convert.ToInt32(str21))
{
}
else if (Convert.ToInt32(str12) > Convert.ToInt32(str22))
{
}
else if (Convert.ToInt32(str12) == Convert.ToInt32(str22) && Convert.ToInt32(str13) > Convert.ToInt32(str23))
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.