我刚开始使用 linq 套件,我认为它很棒,但我有 2 个问题
我有这个项目集合,可以通过几个条件 a、b、c、d、e(不重要)和 someDate(日期时间)过滤
所以我有一个这样的谓词
var predicate = PredicateBuilder.True<Item>();
if (!string.IsNullOrEmpty(filter))
{
predicate = predicate.And(p => p.a.Contains(filter));
predicate = predicate.Or(p => p.b.Value.Contains(filter));
predicate = predicate.Or(p => p.c.Value.Contains(filter));
predicate = predicate.Or(p => p.d.Name.Contains(filter));
predicate = predicate.Or(p => p.e.Contains(filter));
}
// Get items depending on previous predicate
var items= (from item in _context.Items.AsExpandable()
select item).Where(predicate).Where(m => m.Active).ToList();
但是当我尝试使用
predicate = predicate.Or(p => p.someDate.ToShortDateString().Contains(filter));
因为我没有使用特定日期进行比较,而是使用不完整的字符串,例如 8/1 或 08/01,可能只是 8 或可能只是年份,所以我无法在日期之间进行操作。
并抛出此错误。
LINQ to Entities does not recognize the method 'System.String ToShortDateString()' method, and this method cannot be translated into a store expression.
我从这个链接中得到,这是因为 linq to entity 无法将日期时间解析为字符串,因为如果不同的文化设置。
即使我使用 ToString("d") 我也不愿意重新开始做这一切。
所以问题是
有谁知道让谓词构建器与 date.tostring().contains() 一起工作的方法????