IQueryables名单联盟

pom*_*ber 2 c# linq iqueryable

附:

var q1 = (IQueryable<T>).....;
var q2 = (IQueryable<T>).....;
var q3 = (IQueryable<T>).....;

var qList = new List<IQueryable<T>>{q1, q2, q3};
Run Code Online (Sandbox Code Playgroud)

我想做这个:

var q = q1.Union(q2).Union(q3);
Run Code Online (Sandbox Code Playgroud)

但使用qList而不是使用q1,q2q3.我尝试过,qList.SelectMany但行为是不同的(可查询是对数据库SelectMany的查询,并为每个可查询而不是只查询一个查询).

p.s*_*w.g 5

您可以使用Aggregate扩展方法:

var q = qList.Aggregate((x, y) => x.Union(y));
Run Code Online (Sandbox Code Playgroud)

或者按照Thomas Levesque的建议:

var q = qList.Aggregate(Queryable.Union);
Run Code Online (Sandbox Code Playgroud)

这将选择第一个项目qList,将其与第二个项目合并,将结果与第三个项目合并,依此类推qList.请注意,这实际上并不涉及评估任何IQueryable<T>一个,只是构建一个IQueryable<T>代表其他人联合的新东西.