var predicate = PredicateBuilder.New<Items>(true);
predicate = predicate.Or(i => Convert.ToDateTime(i.Entrydate).ToString("M/d/yyyy").Contains(searchText));`
Entrydate
是DateTime?
类型所以直接我不能使用.ToString('M/d/yyyy')
字符串格式。
这不起作用(例外:Must be reducible node
)
IQueryable<Items> items = Repository.GetItems(orderNo).Where(predicate);
这很有效
IQueryable<Items> items = Repository.GetItems(orderNo).ToList().Where(predicate).AsQueryable();
但我不希望将结果转换为列表,而这些是在IQueryable
中
请注意:我在谓词(动态)中使用Convert.ToDateTime()
方法
所以你有一个带有DateTime的类Items?物业EntryDate。并且您需要为谓词构建器输入一个`Expression>,它表示如果Items.EntryDate的字符串表示包含一些searchText,则返回true的谓词。
换句话说,如果EntryDate等于“2003年12月23日”,则其字符串表示为“12/25/2003”,如果包含searchText,则返回true。
如果EntryDate为null,你没有指定你想要的东西。我假设你想要返回false。
Expression<Func<Items, bool>> predicate = (items.EntryDate != null)
&& (items.EntryDate.ToString("M/d/yyyy").Contains(searchText));
您可以在PredicateBuilder中使用它。
顺便说一句:我认为比较DateTime的文本表示是不明智的。这是依赖文化的方式。