Подтвердить что ты не робот

Как объединить два списка IQueryable

Я хочу объединить записи двух списков IQueryable в С#. Я пытаюсь

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Concat(obj1);

и

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Union(obj1);

но если list1 пусто, результирующий список также пуст. В моем случае либо list1 может быть пустым, но list2 может иметь записи. Как их объединить?

4b9b3361

Ответ 1

Вы не используете возвращаемое значение - как и все другие операторы LINQ, метод не изменяет существующую последовательность - он возвращает новую последовательность. Поэтому попробуйте следующее:

var list3 = list1.Concat(list2);

или

var list4 = list1.Union(list2);

Union - операция набора - он возвращает различные значения.

Concat просто возвращает элементы из первой последовательности, за которыми следуют элементы из второй последовательности; результирующая последовательность может включать в себя повторяющиеся элементы.

Вы можете думать о Union как Concat, а затем Distinct.

Ответ 2

Даже

var result = Enumerable.Concat(list1, list2);

не работает?

И убедитесь, что списки пустые, а не null:

var result = Enumerable.Concat(
    list1 ?? Enumerable.Empty<MediaType>()
    list2 ?? Enumerable.Empty<MediaType>());

Также попробуйте:

var result = Enumerable.Concat(
    list1.AsEnumerable(),
    list2.AsEnumerable());

Ответ 3

Еще один вариант, который я нашел:
Объявите:
  IEnumerable<int> usersIds = new int[0];
Например, внутри цикла:

foreach (var id in Ids) {
            IQueryable<int> _usersIds = bl.GetUsers(id).Select(x => x.UserID);
            usersIds = usersIds.Concat(_usersIds);
        }  
var ids = usersIds.Distinct();

Теперь usersIds и идентификаторы (в отдельности) содержат идентификатор всех пользователей как IEnumerable -int -