A continuación se muestra un código de prueba de linqpad. Cuando esto se ejecuta errores, porque la segunda instancia de "elemento" tiene una lista nula de subelementos en lugar de una lista vacía.¿cómo trato las listas nulas como listas vacías en linq?
Quiero tratar ambas situaciones (lista vacía o nula) exactamente de la misma manera, pero me preguntaba si había una manera más limpia que simplemente poner una verificación nula en la lista e inicializar una lista vacía cuando hay un nulo.
en otras palabras, que podría hacer esto:
from si in (i.subitems == null ? new List<item>() : i.subitems)
pero eso es un poco feo y me preguntaba cómo podría mejorar en eso?
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();
}
como una pregunta extra, puede esta misma consulta LINQ puede representar como un lambda y tratar los nulos de la misma manera?
Saludos, Chris
en realidad esa segunda opción es muy legible y no significa que una nueva lista debe crearse solo para ser ignorada. gracias –
@Chris Simpson: agregué la versión de lambda desde que la solicitó.La versión de sintaxis de consulta es mucho más legible. – jason
Realmente creo que la cláusula where es la solución más limpia aquí, así que estoy marcando esto como la respuesta. Solo tenía curiosidad sobre el equivalente lambda, pero estoy de acuerdo, no es tan legible. Gracias. –