以下是我正在使用的简化方案:如果员工是FullTime,UI有下拉列表来搜索员工。在C#中,我将其存储为bool?
。在DB中,这也是一个可以为空的列。
我的linq看起来像这样
bool? ft = null;
return db.Employees.Where(e => !ft.HasValue || e.FullTime.HasValue && e.FullTime.Value == ff.Value)
在浏览了一些SO问题之后,我了解到这并没有像你期望的那样在C#中短路。相反,整个事情传递给sp_executesql。 在LINQ pad中工作时,它先前失败,查询根本没有命中db。
我有多个从UI获得的字段,实际上我的linq看起来像db.Employees.Where(expr).Where(expr).Where(expr)...
此外,由于查询中有大量数据集,我不想用函数替换EXPRESSIONS。将函数放在Where()中返回IEnumerable但我希望结果是IQueryable