猿问

Linq到SQL左转外部联接

Linq到SQL左转外部联接

此查询是否等效于LEFT OUTER加入?

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


九州编程
浏览 461回答 3
3回答

翻翻过去那场雪

不完全是因为左-外连接中的每个“左”行将匹配0-n“右”行(在第二个表中),其中-因为您的行只匹配0-1。要做左外连接,您需要SelectMany和DefaultIfEmpty,例如: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.OrderID == null ? -1 : x.OrderID};(或者通过扩展方法)

凤凰求蛊

您不需要Into语句:var query =      from customer in dc.Customers     from order in dc.Orders          .Where(o => customer.CustomerId == o.CustomerId)          .DefaultIfEmpty()     select new { Customer = customer, Order = order }      //Order will be null if the left join is null是的,上面的查询确实创建了一个左外部联接。链接到处理多个左联接的类似问题:Linq到SQL:多个左外部联接
随时随地看视频慕课网APP
我要回答