Ниже приведен пример тестового кода linqpad. Когда это вызывает ошибки, потому что второй экземпляр «item» имеет нулевой список подэлементов, а не пустой список.Как обращаться с нулевыми списками, такими как пустые списки в linq?
Я хочу обрабатывать обе ситуации (нулевой или пустой список) точно так же, но я задавался вопросом, был ли более чистый способ, чем просто поместить нулевую проверку в список и инициализировать пустой список, когда есть нуль.
другими словами, я мог бы сделать это:
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 можно представить в виде лямбда и лечения NULLS таким же образом?
Приветствия, Крис
фактически этот второй вариант очень читабельен и не означает, что новый список должен быть создан только для игнорирования. спасибо –
@ Крис Симпсон: Я добавил версию лямбды, так как вы просили ее.Версия синтаксиса запроса является более читаемой. – jason
Я действительно думаю, что предложение where является самым чистым решением здесь, поэтому я отмечаю это как ответ. Мне просто было интересно узнать об эквиваленте лямбда, но я согласен, это не так понятно. Благодарю. –