这个查询相当于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
}

推荐答案

不完全是-因为左-外连接中的每个"左"行都将匹配0-n个"右"行(在第二个表中),其中-as您的只匹配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 };   

(or via the extension methods)

.net相关问答推荐

Long.MaxValue从Single到Long的转换导致溢出异常

API响应返回null错误. NET MAUI

EF核心类似功能T-SQL UPDATE FROM

如何使用 awslocal 通过 localstack 中的 cloudwatch events/eventbridge 触发 lambda

判断 Windows 路径中是否存在可执行文件

将 Moq 模拟对象传递给构造函数

使用 Task.Factory.StartNew 传递方法参数

使用泛型装箱和拆箱

BackgroundWorker 中未处理的异常

C# 方法可以定义为采用的最大参数数是多少?

在安全处理异常时避免首次机会异常消息

我应该在 LINQ 查询中使用两个where子句还是&&?

从 .NET 中的字符串末尾修剪字符串 - 为什么会丢失?

为什么 System.Timers.Timer 能在 GC 中存活,而 System.Threading.Timer 不能?

在同一解决方案中引用 2 个不同版本的 log4net

在 C#/.NET 中组合路径和文件名的最佳方法是什么?

如何从其十六进制 RGB 字符串创建 System.Drawing.Color?

Microsoft.Bcl.Build NuGet 包有什么作用?

如何使用 DateTime 指定一天中的最晚时间

.NET Remoting 真的被弃用了吗?