Di seguito è riportato un codice di prova per linqpad. Quando viene eseguito questo errore, la seconda istanza di "elemento" ha un elenco nullo di elementi secondari rispetto a un elenco vuoto.Come si gestiscono gli elenchi Null come elenchi vuoti in linq?
Voglio trattare entrambe le situazioni (elenco nullo o vuoto) esattamente nello stesso modo, ma mi chiedevo se c'era un modo più pulito di mettere semplicemente un controllo Null sulla lista e inizializzare una lista vuota quando c'è un null.
in altre parole, avrei potuto fare questo:
from si in (i.subitems == null ? new List<item>() : i.subitems)
ma questo è un po 'brutto e mi chiedevo come avrei potuto migliorare su questo?
public class item
{
public string itemname { get; set; }
public List<item> subitems { get; set; }
}
void Main()
{
List<item> myItemList = new List<item>()
{
new item
{
itemname = "item1",
subitems = new List<item>()
{
new item { itemname = "subitem1" },
new item { itemname = "subitem2" }
}
},
new item
{
itemname = "item2"
}
};
myItemList.Dump();
var res = (from i in myItemList
from si in i.subitems
select new {i.itemname, subitemname = si.itemname}).ToList();
res.Dump();
}
come una questione bonus, può questa stessa query LINQ essere rappresentato come un lambda e trattare i null allo stesso modo?
Cheers, Chris
in realtà quella seconda opzione è molto leggibile e non significa che una nuova lista deve essere creata solo per essere ignorata. grazie –
@ Chris Simpson: ho aggiunto la versione lambda da quando l'hai richiesta.La versione della sintassi della query è molto più leggibile. – jason
Penso davvero che la clausola where sia la soluzione più pulita qui, quindi segnalo come risposta. Ero solo curioso sull'equivalente lambda ma sono d'accordo, non è così leggibile. Grazie. –