我有两个查询返回同一类对象的集合,在完成这两个查询后,我想将它们联合起来。
var results = from t in All()
where t.Blah.Contains(blahblah)
select t;
var results2 = from t in All()
where t.blah2.contains(blahblah)
select t;
return results.Union(results2);
可能第二个查询无法返回任何结果,并且为null
。
似乎我尝试与两者进行联合,如果第二个参数为null,它将抛出ArgumentNullException
。
显而易见的答案是在第二个查询上执行.ToList()
以查看它是否包含任何内容。这个问题是我试图利用延迟执行,并且不想在此阶段实际执行数据库上的查询。
有什么方法吗?
编辑 - 解决方案
var results2 = from t in All()
where t.blah2!=null && t.blah2.Contains(blahblah)
select t;
基本上,当我尝试在空列表上执行包含时,实际查询返回null
感谢您的帮助!
答案 0 :(得分:6)
results2
应该返回一个空列表,而不是null
执行查询时。您拥有的代码不应该导致任何问题,并且在我能想到的所有情况下都可以正常工作。您能提供可能导致您尝试解决的问题的输入吗?
答案 1 :(得分:4)
以下问题无法解决您的问题吗?
return from t in All()
where t.Blah.Contains(blahblah) && t.Blah2.Contains(blahblah)
select t;
但是,如果results
和results2
需要保持独立,并且您希望将它们合并:
return results.Union(results2 ?? Enumerable.Empty<TResult>());
答案 2 :(得分:0)
var results = from t in All()
where t.Blah.Contains(blahblah)
select t;
var results2 = from t in All()
where t.blah2.contains(blahblah)
select t;
return (results2 != null || results2.Count() > 0) ? results.Union(results2) : results;
如果results2中有内容,则返回union,或者只返回第一个结果集。