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()
方法
答案 0 :(得分:1)
因此,您有一个带有DateTime的Items类?属性EntryDate。并且您需要作为谓词构建器的输入,如果表达式的字符串表示形式包含Items.EntryDate包含某些searchText,则表示该谓词的Expression>。
换句话说,如果EntryDate等于“ 2003年12月23日”,则其字符串表示形式为“ 12/25/2003”,并且如果它包含searchText,则要返回true。
A,如果EntryDate为null,则您没有指定所需的内容。我假设您要返回false。
Expression<Func<Items, bool>> predicate = (items.EntryDate != null)
&& (items.EntryDate.ToString("M/d/yyyy").Contains(searchText));
您可以在PredicateBuilder中使用它。
顺便说一句:我认为比较DateTime的文本表示形式是不明智的。这是依赖文化的方式。