我有以下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。
我无法更改数据库
答案 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