LINQ to Entities では、SQL 結合ではなくリレーションシップの観点から考えてください。Person
したがって、 1 対 0 または 1 のリレーションシップを持つエンティティの SQL 外部結合に相当する文字列は次のようにCustomerInfo
なります。
var q = from p in Context.People
select new
{
Name = p.Name,
IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer
};
L2E は結合を結合するため、CustomerInfo が null の場合、式全体が null と評価されます。したがって、null 非許容 bool の推論された型はその結果を保持できなかったため、null 許容 bool へのキャストです。
1 対多の場合、通常、フラットな SQL スタイルの結果セットではなく、階層が必要です。
var q = from o in Context.Orders
select new
{
OrderNo = o.OrderNo,
PartNumbers = from od in o.OrderDetails
select od.PartNumber
}
これは、まだ詳細のない注文を取得する限り、左結合に似ていますが、SQL のような集合ではなく、OO のようなグラフです。