2011年5月11日水曜日

Linq To SQL: DefaultIfEmpty() の引数

DefaultIfEmpty()にLinq To Objectを指定すると、サポートしてないわよ!って怒られる。
ホントにサポートしてないみたいなんです。
引数なしにするとエラーは出ないが、null が返ってくる。(Defaultは?)

どうするかっつーと、
var q = from user in mtUser
join userGroup in rtGroup
on new { ID = user.USER_ID } equals new { ID = userGroup.USER_ID } into uGroups
from uGroup in uGroups.DefaultIfEmpty()
select new {
USER_ID = user.USER_ID,
GROUP_ID = uGroup != null ? uGroup.GROUP_ID : "<グループなし>",
USER_NAME = user.USER_NAME
};

select部分でnullだったら初期値ってするんですって。

参考サイト:http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/e32208fd-bd11-4a70-96c1-fce653081c51

でもこれだと、更に結合してる場合にはselectできないので、この方法だと解決できない。