LINQ union带有可选的null第二个参数

qui*_*qui 5 c# linq union

我有两个查询返回同一类对象的集合,在完成这两个查询之后,我想将它们联合起来.

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

谢谢您的帮助!

Nic*_*sen 6

results2应该返回一个空列表,而不是null在执行查询时.您拥有的代码不应该导致任何问题,并且在我能想到的所有情况下都可以正常工作.您能否提供可能导致您尝试解决的问题的输入?


use*_*116 5

以下内容不能解决您的问题吗?

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)