Lambda在bool where子句中将null视为false

时间:2018-08-07 09:36:01

标签: c#

我有以下Entity Framework lambda查询:

public IList<MyClass> GetMyClass(int id, bool show)
{
    using (var ctx = new DbContext())
    {
        return ctx.MyClasses.Where(x =>
               x.Id == id &&                      
               x.Show == show // <-- nullable bool
               .OrderByDescending(x => x.CreationDate).Take(100).ToList();
    }
}

我的前端视图已向下传递show布尔值,指示用户对返回内容的偏好。

在数据库中,show属性是nullable

这是一个非常繁琐的查询,因此我一次将其限制为100个,数千行是null,数千行是true,数千行是false

问题

在不降低查询效率的情况下,我如何说出伪代码:

.Where(x => x.Show == show) (where null or false == false)

按现状,如果我向下传递False,则排除null,我需要将它们归类为False。

我无法更改数据库

3 个答案:

答案 0 :(得分:6)

怎么样

(x.Show ?? false) == show

答案 1 :(得分:4)

以下代码应在intervalCallback(AppGlobals._intervalLocs[_frameIdx], AppGlobals._intervalIdx[_frameIdx], _frameIdx);时返回Show == True的记录,而在show == true时返回Show == False或NULL的记录

show == false

答案 2 :(得分:0)

另一种思考表达式的方式。在LINQ to Entity中不是一个好习惯。

(x.Show == true) == show