LINQ过滤器可以为空的日期时间与匹配参数?

时间:2015-09-21 16:28:51

标签: c# linq datetime

我需要按日月和日过滤我的可空日期时间。

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

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

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

我真的需要在数据库上发生这种情况。我无法获得所有内容并在服务器中进行过滤。

我只想让linq按天,月和年过滤日期

感谢任何帮助或指示。

3 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情(更新以包含可选的日期组件):

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)));

答案 1 :(得分:0)

如果您想按日,月,年过滤,请使用以下示例代码:

    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]。第一个元素是月,第二个是日,第三个是年,这取决于您如何定义格式。

答案 2 :(得分:0)

试试这个:

context.Entities.Where(e => e.Date != null && e.Date.Day == 15)

您可以使用DateTime.DayDateTime.MonthDateTime.Year以及逻辑运算符&&||来根据需要进行过滤。但是,您必须先检查 nullity ,否则最终可能会NullExceptions