【发布时间】:2016-02-24 15:49:50
【问题描述】:
这是怎么做到的:
from c in Contacts
join a in Addresses
on c.Address_ID equals a.Address_ID
into Temp
from d in Temp.DefaultIfEmpty()
where c.First_Name.ToUpper().Contains("Pin".ToUpper())
select new { id = c.Contact_ID, value = (c.First_Name??"") + " " + (c.Last_Name??"") + " " + (c.Company_Name??""), FirstName = c.First_Name, LastName = c.Last_Name, AddressFull = d.Address_Full, Phone = c.Phone, Email = c.Email, CompanyName = c.Company_Name }
翻译成这个(使用 LinqPad)?
SELECT [t0].[Contact_ID] AS [id], ((((COALESCE([t0].[First_Name],@p1)) + @p2) + (COALESCE([t0].[Last_Name],@p3))) + @p4) + (COALESCE([t0].[Company_Name],@p5)) AS [value], [t0].[First_Name] AS [FirstName], [t0].[Last_Name] AS [LastName], [t1].[Address_Full] AS [AddressFull], [t0].[Phone], [t0].[Email], [t0].[Company_Name] AS [CompanyName]
FROM [Contact] AS [t0]
LEFT OUTER JOIN [Address] AS [t1] ON [t0].[Address_ID] = ([t1].[Address_ID])
WHERE UPPER([t0].[First_Name]) LIKE @p0
好像Temp.DefaultIfEmpty() == LEFT OUTER JOIN
这种语法背后的原因是什么?有人可以雄辩地解释原因吗?
【问题讨论】:
-
单击 Linqpad 中的“lambda”选项卡。查询的 fluent-LINQ 等效项将回答您的问题。
-
@GertArnold 非常感谢!
标签: c# sql linq-to-sql linqpad