下面是一些linqpad测试代码。当它运行错误时,因为“item”的第二个实例具有与空列表相反的子列表的空列表。如何处理空列表,如linq中的空列表?
我想治疗以完全相同的方式这两种情况下(null或空单),但我想知道是否有比只是把名单上的空校验和初始化列表为空时,有一个空一个更清洁的方式。
换句话说,我可以这样做:
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查询被表示为Lambda和处理空值以同样的方式?
干杯,克里斯
实际上,第二个选项是非常可读的,并不意味着一个新的列表需要被创建只能被忽略。谢谢 – 2010-02-04 18:16:14
@Chris Simpson:自从您提出要求之后,我添加了lambda版本。查询语法版本更可读。 – jason 2010-02-04 18:26:16
我真的认为where子句是最干净的解决方案,所以我将其标记为答案。我只是对lambda相当好奇,但我同意,它不是可读的。谢谢。 – 2010-02-04 18:58:55