には、以下のケースを検討nullにすることができたときに参加左:LINQのは、等号の左側にあるクラスが
クラスを
public class Nested
{
public Nested(int id){ Id = id; }
public int? Id {get; set;}
}
public class Pair
{
public Nested NestedType {get; set;}
public string Name {get; set;}
}
public class Match
{
public int? Id {get; set;}
public string Name {get; set;}
}
インスタンス
var p1 = new Pair();
p1.NestedType = new Nested(1);
p1.Name = "a";
var p2 = new Pair();
p2.NestedType = null;
p2.Name = "b";
var p3 = new Pair();
p3.NestedType = new Nested(3);
p3.Name = "c";
List<Pair> pairs = new List<Pair>() {p1, p2, p3};
var m1 = new Match();
m1.Id = 1;
m1.Name = "AA";
var m2 = new Match();
m2.Id = null;
m2.Name = "BB";
var m3 = new Match();
m3.Id = 3;
m3.Name = "CC";
List<Match> matches = new List<Match>(){m1, m2, m3};
クエリ
var query = from p in pairs
join m in matches on p.NestedType.Id equals m.Id into pm
from m in pm.DefaultIfEmpty()
select new
{
PairName = p.Name,
MatchId = m != null ? m.Id : null
MatchName = m != null ? m.Name : null
};
p.NestedType
がnullの場合、クエリはequals
ステートメント行で例外をスローします。
達成したいのは、p.NestedType
がヌルの場合は、null
の値をその代わりに配置する必要があります。あたかもp.NestedType
が割り当てられているものの、そのId
はnullです。それはできますか?
EDIT:C#5.0を使用する必要があります。
var query = from p in pairs
where p.NestedType!=null //Notice the where condition added
join m in matches on p.NestedType.Id equals m.Id into pm
from m in pm.DefaultIfEmpty()
select new
{
PairName = p.Name,
MatchId = m != null ? m.Id : null,
MatchName = m != null ? m.Name : null
};
OR
あなたが取得したい場合は:あなたはあなたのケースで投げnull参照の例外を防止し、これはあなたのケースのために望ましい結果をもたらすかどうかを確認することができますwhere(...)
句で
これはまさに[C#のヌル条件演算子](HTTPSであります://msdn.microsoft.com/en-us/library/dn986595.aspx)は - 'on p?.NestedType.Idはm.Idと同じです' –