Союз Списка 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> который представляет собой союз других.

Другие вопросы по тегам