以下は、いくつかのlinqpadテストコードです。これを実行すると、「item」の2番目のインスタンスに空のリストではなくサブアイテムのnullリストがあるため、エラーが発生します。
両方の状況(nullまたは空のリスト)をまったく同じように扱いたいのですが、リストにnullチェックを入れて、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クエリをラムダとして表し、nullを同じように扱うことができますか?
乾杯、クリス