带有匹配参数的LINQ过滤器可空日期时间
本文关键字:过滤器 日期 时间 LINQ 参数 | 更新日期: 2023-09-27 18:13:59
我需要按日、月、年筛选我的可空日期时间。
我目前正在尝试使用字符串比较。我在linq中的where语句中有这个:
DOB.ToString().StartsWith("2/25/19") || DOB == null
但是它不起作用。我知道这是因为服务器没有像那样存储日期,但我不确定它是如何存储的,以及我如何检索它并进行比较。
我真的需要这个发生在数据库上。我无法在服务器中获取所有内容和过滤器。
我只想让linq按日、月、年筛选日期
您可以尝试这样做(更新为包括可选的日期组件):
int? month = 2;
int? day = 25;
int? century = 19; // actual century minus one
// other LINQ here
.Where(x => x.DOB == null
|| ((month == null || x.DOB.Month = month)
&& (day == null || x.DOB.Day = day)
&& (century == null || x.DOB.Year / 100 == century)));
try this:
context.Entities.Where(e => e.Date != null && e.Date.Day == 15)
您可以使用DateTime.Day
, DateTime.Month
, DateTime.Year
和逻辑运算符&&
和||
来过滤您认为合适的。但是,您必须首先检查是否为空,否则您可能会以NullExceptions
如果要按日、月、年进行筛选,请使用下面的示例代码:
DateTime dateTime = DateTime.Now;
Console.WriteLine(dateTime.Day);
Console.WriteLine(dateTime.Month);
Console.WriteLine(dateTime.Year);
您可以从DateTime
对象中获得这些值。然后,你可以对它应用滤镜。
看了评论后,我明白你的意思了。
例如,输入如下字符串:
string search = "2/25/2015";
现在,您想提取字符串的值来执行过滤,对吗?只是做:
string[] values = search.Split('/');
则values
为[2, 25, 2015]
。第一个元素是月,第二个是日,第三个是年,这取决于你如何定义格式。