我有一些表和以下查询条件:如果参数A为null,则取全部,如果不是,则在查询中使用它。我知道如何分两步完成:
List<O> list = null;
if (A = null)
{
list = context.Obj.Select(o => o).ToList();
}
else
{
list = context.Obj.Where(o.A == A).ToList();
}
是否可以与一个查询相同? 感谢
答案 0 :(得分:18)
怎么样:
list = context.Obj.Where(o => A == null || o.A == A)
.ToList();
编辑:您可以在一个查询中执行此操作但仍使用条件:
IEnumerable<O> query = context.Obj;
if (A != null)
{
query = query.Where(o => o.A == A);
}
var list = query.ToList();
答案 1 :(得分:3)
我可能会写这样的查询:
IQueryable<O> query = context.Obj;
if (A != null)
query = query.Where(o => o.A == A);
var list = query.ToList()
这不是一个表达,但我认为它非常易读。
此外,此代码假定context.Obj
为IQueryable<O>
(例如,您使用的是LINQ to SQL)。如果情况并非如此,请使用IEnumerable<O>
。
答案 2 :(得分:1)
试
context.Obj.Where(a => A != null && a.A == A).ToList()
应该都很好。如果A为null,则'a.A == A'将被忽略。