我有两个查询返回同一类对象的集合,在完成这两个查询之后,我想将它们联合起来.
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);
Run Code Online (Sandbox Code Playgroud)
这是有可能的是,第二个查询可能返回任何结果,并且是null.
看起来如果我尝试与两者进行联合,如果第二个参数为null,它将抛出一个ArgumentNullException.
显而易见的答案是只对.ToList()第二个查询执行以查看它是否包含任何内容.这个问题是我试图利用延迟执行,并且不想在此阶段实际执行数据库上的查询.
有没有办法解决?
编辑 - 解决方案
var results2 = from t in All()
where t.blah2!=null && t.blah2.Contains(blahblah)
select t;
Run Code Online (Sandbox Code Playgroud)
基本上,当我尝试在空列表上执行包含时,实际查询返回null
谢谢您的帮助!
results2应该返回一个空列表,而不是null在执行查询时.您拥有的代码不应该导致任何问题,并且在我能想到的所有情况下都可以正常工作.您能否提供可能导致您尝试解决的问题的输入?
以下内容不能解决您的问题吗?
return from t in All()
where t.Blah.Contains(blahblah) && t.Blah2.Contains(blahblah)
select t;
Run Code Online (Sandbox Code Playgroud)
但是,如果results并且results2需要保持分开,而您想将它们结合起来:
return results.Union(results2 ?? Enumerable.Empty<TResult>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6084 次 |
| 最近记录: |