Союз Списка IQueryables
С:
var q1 = (IQueryable<T>).....;
var q2 = (IQueryable<T>).....;
var q3 = (IQueryable<T>).....;
var qList = new List<IQueryable<T>>{q1, q2, q3};
Я хочу сделать это:
var q = q1.Union(q2).Union(q3);
Но используя qList
Вместо того, чтобы использовать q1
, q2
а также q3
, Я пробовал с qList.SelectMany
но поведение отличается (запрашиваемыми являются запросы к базе данных и SelectMany
делает запрос для каждого запроса вместо одного запроса).
1 ответ
Решение
Вы можете использовать Aggregate
метод расширения:
var q = qList.Aggregate((x, y) => x.Union(y));
Или, следуя предложению Томаса Левеска:
var q = qList.Aggregate(Queryable.Union);
Это выберет первый элемент из qList
, объединить его со вторым элементом, объединить результат с третьим элементом и так далее для каждого элемента в qList
, Обратите внимание, что это на самом деле не будет включать оценку любого из IQueryable<T>
строим новый IQueryable<T>
который представляет собой союз других.