Ниже приведен тестовый код linqpad. Когда он запускается, это приводит к ошибкам, потому что второй экземпляр «item» имеет пустой список подэлементов, а не пустой список.
Я хочу, чтобы обе ситуации (нулевой или пустой список) обрабатывались одинаково, но мне было интересно, есть ли более понятный способ, чем просто поставить нулевую проверку в списке и инициализировать пустой список при наличии нуля.
другими словами, я мог бы сделать это:
from si in (i.subitems == null ? new List<item>() : i.subitems)
но это немного уродливо, и я удивляюсь, как я могу улучшить это?
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();
}
в качестве дополнительного вопроса, может ли этот же запрос linq быть представлен как лямбда и обрабатывать нули одинаково?
Ура, Крис