为了账号安全,请及时绑定邮箱和手机立即绑定

Linq到SQL左转外部联接

Linq到SQL左转外部联接

九州编程 2019-07-26 15:14:24
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}
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

不完全是因为左-外连接中的每个“左”行将匹配0-n“右”行(在第二个表中),其中-因为您的行只匹配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.OrderID == null ? -1 : x.OrderID};

(或者通过扩展方法)




查看完整回答
反对 回复 2019-07-27
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您不需要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:多个左外部联接




查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 460 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信