【发布时间】:2018-12-05 18:45:05
【问题描述】:
我正在尝试执行可能具有可为空参数的 linq 查询。
这是我的 linq 调用
listOfControlsVM = db.Controls.Where((status == null || s.Status.Description == status) && (impact == null || s.Impact == impact)).ToList();
现在状态或影响都可以是可为空的参数(我还有两个,但我从示例中删除了它们)。使用这种方法,我的查询不会返回正确的结果集。
我想知道是否有其他更好的方法可以在 linq 中使用可为空的参数。例如,如果状态或影响有价值,则将它们包含在条件中,否则跳过它们。
【问题讨论】:
-
您可以在 SO 上找到许多类似的问题/解决方案。链式
Where是我最喜欢的方法。但是您使用的方法是第二个可行的选择,那么真正行不通的方法是——您能举一个“查询没有返回正确的结果集”的例子吗? -
感谢您的回复@IvonStoev。我知道应该从数据库返回的结果数量,当我将它们与从 linq 查询返回的结果进行比较时,它们不匹配。如果值为空,我想要实现的是从 where 子句中完全排除参数。谢谢
-
然后尝试chaining where clauses 方法。例如
var query = db.Controls.AsQueryable(); if (status != null) query = query.Where(s => s.Status.Description == status); if (impact != null) query = query.Where(s => s.Impact == impact);等。我很确定问题是重复的,这就是为什么不发布答案。 -
生成的 SQL 是什么样的?
标签: entity-framework linq linq-to-sql linq-to-entities linq-to-objects