带有匹配参数的LINQ过滤器可空日期时间

本文关键字:过滤器 日期 时间 LINQ 参数 | 更新日期: 2023-09-27 18:13:59

我需要按日、月、年筛选我的可空日期时间。

我目前正在尝试使用字符串比较。我在linq中的where语句中有这个:

DOB.ToString().StartsWith("2/25/19") || DOB == null

但是它不起作用。我知道这是因为服务器没有像那样存储日期,但我不确定它是如何存储的,以及我如何检索它并进行比较。

我真的需要这个发生在数据库上。我无法在服务器中获取所有内容和过滤器。

我只想让linq按日、月、年筛选日期

带有匹配参数的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]。第一个元素是月,第二个是日,第三个是年,这取决于你如何定义格式。