Asp.net mvc Entityframework查询,仅当变量不为null时选择,否则不要';t选择
我有这样的疑问:Asp.net mvc Entityframework查询,仅当变量不为null时选择,否则不要';t选择,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有这样的疑问: var p = form p in db.table where(p.Id == variable1 && p.proId == variable2 ...) select p.Tolist(); 例如,如果变量1为null,则不要在where子句中比较该条件,只取where子句 where (p.proId == variable2 ...) 有没有办法做到这一点。提前谢谢。你不能在where子句中签入null吗 where((
var p = form p in db.table
where(p.Id == variable1 && p.proId == variable2 ...)
select p.Tolist();
例如,如果变量1为null,则不要在where子句中比较该条件,只取where子句
where (p.proId == variable2 ...)
有没有办法做到这一点。提前谢谢。你不能在
where
子句中签入null
吗
where((variable1 == null || p.Id == variable1)
&& (variable2 != null && p.proId == variable2))
就这么简单:
where((variable1 == null || p.Id == variable1) && p.proId == variable2 ...)
虽然这里的其他答案也会起作用,但您标记了您的问题实体框架,并且无论何时您将LINQ写入实体,都必须牢记
IQueryable
/IEnumerable
边界,因为只有完全符合IQueryable
的代码才能有效地转换为SQL(很多时候,例如,string.Format
,根本不可转换)
请注意,如果改为将LINQ写入对象,则给出的其他答案将更加高效、简洁和可读:
var q = from p in someEnumerable
where null == variable1 || p.Id == variable1
where p.proId == variable2
select p;
注意:我省略了.ToList()
,以将查询保持为IQueryable
(或IEnumerable
),因为有很多次您实际上只希望通过查询枚举一次,或者在解析查询之前投影到更简单的内容(例如,选择p.Id
)。这在L2E的情况下尤其重要,因为在.ToList()
(或.ToArray()
或.Load()
)之前所做的一切都可以直接转换为SQL,这是使用EF最强大的方式
var q = from p in someEnumerable
where null == variable1 || p.Id == variable1
where p.proId == variable2
select p;