Как объединить два списка 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
может иметь записи. Как их объединить?
Ответы
Ответ 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 -