Expression<Func<SettingItemModel, bool>> func = _ => false;
return GetAllSettingItemModel().Where(func).OrderBy(s => s.OrderParameter);
为什么如果我将这个简单的谓词赋给'func'而不是s=>s.settingcategory==-1
(在我的情况下总是false),我会在忽略条件时获得所有元素,而不是获得0个元素呢?
我想是因为谓词中没有考虑SettingItemModel对象,但我不确定。
这看起来像是IQueryable
提供程序的一个bug
理论上,IQueryable提供程序可以根据需要解释和处理该表达式,但对于常量false
值,它似乎不正确。您将需要向您的提供商提出一个bug。
一种解决方法可能是将该表达式带入内存,并对IEnumerable进行检查
return GetAllSettingItemModel().ToList().Where(func).OrderBy(s => s.OrderParameter);
或者如果表达式可以在本地求值,则在执行查询之前执行
return func() ? GetAllSettingItemModel().OrderBy(s => s.OrderParameter) : Enumerable.Empty<SettingItemModel>();