我有两个列表(称为foo和bar),我想最小化LINQ查询的数量(好吧,我知道它们的开销很小,但是,两个查询需要两倍的时间,LINQ和iOS开发可以有问题)。查询将完全相同,但我想将结果添加到两个列表中。
我目前的代码如下所示
List<foo> foos = new List<foos>();
List<bar> bars = new List<bars>();
var agg = (from fa in mainList
from pa in fa.subList
from cg in pa.subSubList
let cr = pa.anotherSubList
where cg.DatePerformed.Year == DateTime.Now.Year - 1 && cr.Count != 0
select foos.Add(fa)
select bars.Add(pa));
编译器在第二次选择时抱怨。
有没有办法在LINQ中做我想做的事情,或者我需要使用两个循环?
答案 0 :(得分:1)
您可以选择这两个项目并迭代结果,将一个项目添加到第一个列表,另一个项目添加到另一个列表。 你可以用一个可以同时包含两个项目,一个元组或只是一个匿名类型的类来做到这一点:
var result = from fa in mainList
from pa in fa.subList
from cg in pa.subSubList
let cr = pa.anotherSubList
where cg.DatePerformed.Year == DateTime.Now.Year - 1 && cr.Count != 0
select new {First=fa, Second=pa};
foreach (var pair in result)
{
foos.Add(pair.fa);
bars.Add(pair.pa);
}