#c# #asp.net #.net #linq
#c# #asp.net #.net #linq
Вопрос:
У меня возникла проблема при объединении 3 списков, проблема в том, что она исходит из комбинации с несколькими вариантами выбора, поэтому я попытался объединить три списка, даже если они были пустыми, но инструкция «объединить» не работает с пустыми списками, кто-нибудь может меня направить.
if (model.Estatus.Count() < 3)
{
if (model.Estatus.Contains(2))
{
var aut = listaCompleta.Where(x => x.Autorizada == true).ToList();
listaAutorizada.Concat(listaCompleta.Where(x => x.Autorizada == true).ToList());
}
if (model.Estatus.Contains(3))
{
listaRechazada.Concat(listaCompleta.Where(x => x.Autorizada == false).ToList());
}
if (model.Estatus.Contains(4))
{
listaPendientes.Concat(listaCompleta.Where(x => x.Autorizada == null).ToList());
}
listaEstatus.Concat(listaAutorizada).Concat(listaRechazada).Concat(listaPendientes);
}
Когда список пуст, он также превращает список результатов в null. Какую другую альтернативу вы могли бы использовать для объединения этих списков?
Комментарии:
1.
ToList()
всегда возвращает пустой список, если элементы не найдены. Не null. Но еслиlistaPendientes
значение равно null и код пропускаетсяif (model.Estatus.Contains(4))
, тогда вам нужна проверка null, например, ответ @SalahAkbari.2. Строка
listaAutorizada.Concat(listaCompleta.Where(x => x.Autorizada == true).ToList());
ничего не делает, потому что вы игнорируете возвращаемое значениеConcat
метода.
Ответ №1:
Вам нужно проверить наличие null с помощью этого кода:
?? Enumerable.Empty<theListType>()
Итак, ваш код должен выглядеть так:
var result = (list1 ?? Enumerable.Empty<ListType>()).Concat(list2 ??
Enumerable.Empty<ListType>()).Concat(list3 ?? Enumerable.Empty<ListType>());
Ответ №2:
Этот метод можно использовать во многих сценариях:
class Program
{
static void Main()
{
var list1 = new List<string> { "bella", "ci" };
var list2 = new List<string> { "bella", "ci" };
List<string> list3 = null;
var result = ConcatLists(list1, list2, list3);
}
public static List<T> ConcatLists<T>(params List<T>[] lists)
{
var outputList = new List<T>();
foreach(var list in lists)
{
if (list != null)
outputList.AddRange(list);
}
return outputList;
}
}