当前位置: 首页 > 知识库问答 >
问题:

LINQ:Where()忽略简单的假条件

孟佑运
2023-03-14
Expression<Func<SettingItemModel, bool>> func = _ => false;

return GetAllSettingItemModel().Where(func).OrderBy(s => s.OrderParameter);        

为什么如果我将这个简单的谓词赋给'func'而不是s=>s.settingcategory==-1(在我的情况下总是false),我会在忽略条件时获得所有元素,而不是获得0个元素呢?

我想是因为谓词中没有考虑SettingItemModel对象,但我不确定。

共有1个答案

盖成弘
2023-03-14

这看起来像是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>();   
 类似资料:
  • 问题内容: 我正在使用此代码来计算忽略周末的两个日期之间的差异: 我还有一个名为table1的表,其中存在“日期”列(其类型为“ DATE”),其中记录了假期的所有日期。 示例表1: 我正在尝试使我的代码检查该表,并且如果一个日期在上面的两个日期之间,则它在输出中为-1天。 问题答案: 如果将其划分为以下任务,则应该很容易: 生成所有使用两个给定日期之间的日期 行生成 方法如图所示。 忽略周末的日

  • 我已经读了几遍这方面的文档,我仍然不能完全理解这些不同命令之间的区别。也许这只是我,但是文档可以更清晰: http://git-scm.com/docs/gitignore https://help.github.com/articles/ignoring-files 此外,许多关于这一主题的评论似乎使用了“索引”、“promise”和“跟踪”这几个词,这使得这三个词之间的区别不那么明显。 我目前

  • 我有一个文件,我已在签出时标记为假设不变。大多数命令(例如,、

  • 问题内容: 假设您具有以下pyspark DataFrame: 接下来的两个代码块应该做同样的事情-即,如果不是,则返回该列的大写。但是,第二种方法(使用)会产生错误。 方法1 :使用 方法2 :在内部使用 这给了我。为什么调用中的检查似乎被忽略了? 我知道我可以改变我要避免这种错误,但我想知道为什么它的发生。 完整回溯 : 问题答案: 您必须记住,Spark SQL(与RDD不同)不是您所看到的

  • 问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc

  • 忽略未版本控制的条目 在任何工作拷贝,将版本化文件和目录与没有也不准备版本化的文件分开会是非常常见的情况。文本编辑器的备份文件会将目录搞乱,代码编译过程中生成的中间文件,甚至最终文件也不是你希望版本化的,用户在见到这些文件和目录(经常是版本控制工作拷贝中)的任何时候都会将他们删除。 期望让Subversion的工作拷贝摆脱混乱保持干净是可笑的,实际上Subversion将工作拷贝是普通目录作为它的