Linq:如果参数为null,如何排除条件

时间:2011-09-15 22:53:48

标签: c# sql linq

我有一些表和以下查询条件:如果参数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();
}

是否可以与一个查询相同? 感谢

3 个答案:

答案 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.ObjIQueryable<O>(例如,您使用的是LINQ to SQL)。如果情况并非如此,请使用IEnumerable<O>

答案 2 :(得分:1)

context.Obj.Where(a => A != null && a.A == A).ToList()

应该都很好。如果A为null,则'a.A == A'将被忽略。