Array DateTime.Date与Linq查询的兼容性

时间:2011-11-09 21:54:17

标签: c# linq datetime linq-to-entities

我正在实施一个简单的搜索。现在,我可以使用字符串数组Split中的术语搜索帖子,但我想搜索日期。所以,我添加了一个datetime数组。我遇到的问题是我只想搜索datetime的Date部分,并忽略Time。每当我搜索时,我都会在d.Date时收到错误。

 IEnumerable<Post> posts = from p in post_repository.Posts 
                           from s in split 
                           from d in Date
                           where (p.Title.Contains(s) || p.ContactPhone.Contains(s) || p.Content.Contains(s) || p.Author.Contains(s) || p.ContactEmail.Contains(s)|| **p.EndDate.Date.Equals(d.Date)**) && p.Deleted == false && p.Publish == true 
                           select p;

错误讯息:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.


Exception Details: System.NotSupportedException: The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

我已经坚持了一段时间,有人能弄清楚我做错了什么吗? 所有日期都已初始化,因此没有任何空值,除日期以外的所有内容都有效。如果我删除d.Date或EndDate.Date,没有错误,但我没有得到所需的结果。 在此先感谢。

编辑1:

string[] split = query.Split(breakpoints);
DateTime[] arrayOfDateTimes = Datify(split);

宣言似乎真的很愚蠢。 Datify是我写的一个函数,它返回一个DateTime数组,它正常工作,因为我一步一步地查看局部变量。

private readonly char[] breakpoints = {'.', ',', ' ', ':', '\t' };

查询是搜索,它是一个字符串。

1 个答案:

答案 0 :(得分:1)

使用 EntityFunction 类来修剪时间部分。

使用System.Data.Objects;

EntityFunctions.TruncateTime(结束日期)