1. ホーム
  2. .net

[解決済み] LINQ to SQL 左外部結合

2022-05-10 17:03:55

質問

このクエリは LEFT OUTER を結合するか?

//assuming that I have a parameter named 'invoiceId' of type int
from c in SupportCases
let invoice = c.Invoices.FirstOrDefault(i=> i.Id == invoiceId)
where (invoiceId == 0 || invoice != null)    
select new 
{
      Id = c.Id
      , InvoiceId = invoice == null ? 0 : invoice.Id
}

解決方法は?

左外部結合の各行("left")は0-n個の"right"(2番目のテーブル)にマッチしますが、あなたの場合は0-1個しかマッチしないからです。左外部結合を行うには、以下のものが必要です。 SelectManyDefaultIfEmpty といった具合に。

var query = from c in db.Customers
            join o in db.Orders
               on c.CustomerID equals o.CustomerID into sr
            from x in sr.DefaultIfEmpty()
            select new {
               CustomerID = c.CustomerID, ContactName = c.ContactName,
               OrderID = x == null ? -1 : x.OrderID };   

( または拡張メソッドで )