我有一個這樣的SQL陳述句:
我有一個這樣的SQL陳述句。
select
b.ActivityRecordId, b.ActivityName, b.ActivityDetail,
b.CustomerId, e.CustomerName,
b.JobStatusId, c.JobStatusName, b.EstimateStartDate,
b.EstimateFinishDate, b. StartedDateTime, b.FinishedDateTime。
a.ActivityRecordProgressId, a.CustomerContactId,
Concat(d.FirstName, ' ', d.MiddleName, ' ', d.LastName) as fullName,
a.開始,a.完成,a.活動描述。
g.ActivityTypeId, g.ActivityTypeName, a.ActivitySubTypeId, f.ActivitySubTypeName
來自的
活動記錄進度a
right join join
活動記錄b on a.ActivityRecordId = b.ActivityRecordId
leftjoin
ActivitySubType f on a.ActivitySubTypeId = f.ActivitySubTypeId
leftjoin
活動型別 g on f.ActivityTypeId = g.ActivityTypeId
leftjoin
CustomerContact d on a.CustomerContactId = d.CustomerContactId
inner join
JobStatus c on b.JobStatusId = c.JobStatusId
innerjoin
客戶e on b.CustomerId = e.CustomerId
然后我試著把它轉換成Linq:
var obj = (from a in _db.ActivityRecords
join b in _db.ActivityRecordProgresses on a. ActivityRecordId equals b.ActivityRecordId into ab.
from p in ab.DefaultIfEmpty()
join c in _db.Customers on a.CustomerId equals c.CustomerId
join e in _db.CustomerContacts on c.CustomerId equals e.CustomerId
join d in _db.JobStatuses on a.JobStatusId equals d.JobStatusId
join f in _db.ActivitySubTypes on p.ActivitySubTypeId equals f.ActivitySubTypeId
join g in _db.ActivityTypes on f.ActivitySubTypeId equals g.ActivityTypeId
select new OutstandingActivityViewModel {
ActivityRecordId = p.ActivityRecordId。
ActivityName = a.ActivityName,
ActivityDetail = a.ActivityDetail,
CustomerId = a.CustomerId。
CustomerName = c.CustomerName,
JobStatusId = a.JobStatusId,
JobStatusName = d.JobStatusName,
EstimateStartDate = a.EstimateStartDate,
StartedDateTime = a. StartedDateTime,
EstimateFinishDateTime = a.EstimateFinishDate。
FinishedDateTime = a.FinishedDateTime,
名 = e.FirstName, MiddleName = e.MiddleName, LastName = e.LastName。
開始 = p. Started, 完成 = p.Finished,
ActivityTypeName = g.ActivityTypeName, ActivitySubTypeName = f.ActivitySubTypeName,
ActivityDescription = p.ActivityDescription
}).ToListAsync()。
但是結果卻不一樣。SQL的結果是正確的。它只有4條記錄。但在Linq中,它出現了6條記錄。我肯定我在linq語法上做錯了什么。
誰能告訴我我的語法錯誤在哪里?
真的很感激--謝謝你。
uj5u.com熱心網友回復:
謝謝你對我的問題進行評論。它非常有用。 在使用SQL生成的試驗和錯誤之后,我終于找到了答案。下面是關于Linq語法的答案:
var obj = (from a in _db.ActivityRecords
join b in _db.ActivityRecordProgresses on a。 ActivityRecordId equals b.ActivityRecordId into leftsatu
from leftkesatu in leftsatu.DefaultIfEmpty()
join c in _db.ActivitySubTypes on leftkesatu. ActivitySubTypeId equals c.ActivitySubTypeId into leftdua.
from leftkedua in leftdua.DefaultIfEmpty()
join d in _db.ActivityTypes on leftkedua. ActivitySubTypeId equals d.ActivityTypeId into lefttiga.
from leftketiga in lefttiga.DefaultIfEmpty()
join e in _db.CustomerContacts on leftkesatu. CustomerContactId equals e.CustomerContactId into leftempat.
from leftkeempat in leftempat.DefaultIfEmpty()
join f in _db.JobStatuses on a.JobStatusId equals f.JobStatusId
join g in _db.Customers on a.CustomerId equals g.CustomerId
select new OutstandingActivityViewModel
{
ActivityRecordId = a.ActivityRecordId,
ActivityName = a.ActivityName,
ActivityDetail = a.ActivityDetail,
CustomerId = a.CustomerId。
CustomerName = g.CustomerName。
JobStatusId = a.JobStatusId,
JobStatusName = f.JobStatusName,
EstimateStartDate = a.EstimateStartDate,
StartedDateTime = a. StartedDateTime,
EstimateFinishDateTime = a.EstimateFinishDate。
FinishedDateTime = a.FinishedDateTime,
名字 = leftkeempat.FirstName。
中間名 = leftkeempat.MiddleName,
姓氏 = leftkeempat.LastName,
開始 = leftkesatu. Started,
完成了 = leftkesatu.Finished,
ActivityTypeName = leftketiga.ActivityTypeName,
ActivitySubTypeName = leftkedua.ActivitySubTypeName,
ActivityDescription = leftkesatu.ActivityDescription
}
);
它將產生像這樣的SQL:
SELECT [a].[ActivityRecordId], [a]. [ActivityName], [a]. [ActivityDetail], [a]. [CustomerId], [c0]. [CustomerName], [a].[JobStatusId], [j]. [JobStatusName]。
[a].[EstimateStartDate], [a].[StartedDateTime], [a].[EstimateFinishDate] AS [EstimateFinishDateTime], [a].[FinishedDateTime]。
[c].[名], [c].[中名], [c].[姓] 。
[a0].[開始], [a0].[完成], [a2].[活動型別名稱], [a1].[活動副型別名稱], [a0].[活動描述]
FROM [ActivityRecord] AS [a)
LEFT JOIN [ActivityRecordProgress] AS [a0] ON [a] 。 [ActivityRecordId] = [a0].[ActivityRecordId] 。
LEFT JOIN [ActivitySubType] AS [a1] ON [a0] 。 [ActivitySubTypeId] = [a1].[ActivitySubTypeId] 。
LEFT JOIN [ActivityType] AS [a2] ON [a1]. [ActivitySubTypeId] = [a2].[ActivityTypeId] 。
LEFT JOIN [CustomerContact] AS [c] ON [a0]. [CustomerContactId] = [c].[CustomerContactId] 。
INNER JOIN [JobStatus] AS [j] ON [a]. [JobStatusId] = [j].[JobStatusId] 。
INNER JOIN [Customer] AS [c0] ON [a]. [CustomerId] = [c0].
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310084.html
標籤:
上一篇:如何檢查字典中的重復值
