Я бы, вероятно, написал запрос следующим образом:
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>
.