如何按日期过滤LINQ查询?

时间:2009-05-23 11:08:45

标签: linq

query = query.Where(q => q.Date.ToString().Contains(strDate));

以上陈述不正确。

如果我使用“==”那么它将与确切日期匹配。那没问题。但我可以过滤,就像我们过滤字符串??

3 个答案:

答案 0 :(得分:3)

我真的不明白你对“过滤器”的意思。

您可以执行以下操作:

query = query.Where(q => q.Date.Year.Equals(myDate.Year));

query = query.Where(q => q.Date.Day.Equals(myDate.Day));

如果这就是你所追求的目标。

当然,你必须将strDate强制转换为DateTime。如果您真的不想这样做,您也可以将DB日期转换为相同格式的字符串:

query = query.Where(q => q.Date.ToString("dd-MM-yyyy").Contains(strDate));

答案 1 :(得分:0)

假设q.Date是DateTime的一个实例,我认为将DateTime实例转换为String是比较日期的最佳方法。基于对象的属性过滤DateTime会更加可靠。例如,年,月等......

例如,如果您想在strDate中过滤年份,则可以执行以下操作。

var d = DateTime.Parse(strDate);
query = query.Where(q => q.Date.Year == d.Year);

您能否通过详细说明strDate将包含哪些类型的值来为我们提供更多上下文,以便我们知道您要过滤哪些内容。

答案 2 :(得分:0)

如果您确定要在搜索中获得的字符串,则可以随时执行特定于您所在地区的字符串。

(((q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).Value.Day.ToString()) + "/" + ((q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).Value.Month.ToString()) + "/" + ((q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).Value.Year.ToString())).ToString().Contains(strDate) || (q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).ToString().Contains(strDate))

这会产生匹配日期搜索的d/m/yyyy字符串,例如。这对于公共搜索来说并不理想,但它比简单的.ToString().Contains()更好。