我已經對SE進行了廣泛的瞭解,嘗試了所有的建議,檢出了MSDN如何在LINQ to SQL中執行Left Join等效項,並且構建了我的LINQ查詢根據MSDN的例子。LINQ Left通過DefaultIfEmpty加入SQL等效項無法返回結果
但是,結果不是SQL會返回什麼,我完全失去了我要去哪裏錯誤。
這裏有一些細節:
我有兩個表,Customers和Reports。客戶可以提交很多報告或不提交。在目前的狀態下,我的報告比客戶多得多。
LINQ代碼:
var query = {from c in customers
join r in reports on c.Id equals r.Id into temp
from items in temp.DefaultIfEmpty()
select new {
c.Id,
LastReportDate = items?.DateCreated ?? DateTime.MinValue
}).ToList();
SQL代碼:
SELECT [Customers].[Id], R.LastReport AS LastReportDate FROM [Customers]
LEFT JOIN (
SELECT Reports.Id, MAX([Reports].[Created]) AS LastReport
FROM Reports GROUP BY Reports.Id
) AS r ON [Customers].[Id] = r.[Id]
的問題是,該查詢返回等於報告數元素的數目。但是,我想要的是獲得所有客戶和提交報告的人的列表,我希望顯示最新報告的日期,對於那些沒有提交任何內容的人,我很樂意讓它留NULL或DateTime .MinValue
任何幫助將不勝感激。我想我通過電話某處在我的LINQ代碼所缺少一組...
你確定'on c.Id等於r.Id'是否正確?是不是像'在c.Id等於r.CustomerId'上?目前,您正在將客戶ID與報告ID相關聯。 –
Linq代碼生成的SQL?或者你是否試圖在linq中編寫這條sql語句? – Magnus
@Magnus我正在嘗試在LINQ中編寫SQL語句 – awdBoy