我有幾張桌子,主要是DefectRecord
,其他叫做DefectArea
,DefectLevel
......等,還有一個叫DefectAttachment
。而這個問題是關於加入DefectRecord
與其他表來獲得ViewModel進一步使用。我面臨的難題是關於DefectAttachment
表格。如何在LINQ中使用額外的過濾功能執行左連接?
DefectRecord
與DefectAttachment
有一對多的關係。儘管一個缺陷記錄可能沒有附件,但可能有多個附件。
按道理我試圖執行一個左連接中DefectRecord
& DefectAttachment
,但有一個更requiredment:
- 如果有多個附件,只選擇最老的(即 一個與最古老的
CreatedDate
場值)
我被困在這個要求,我怎麼能用LINQ-to-Entities執行此操作?下面是什麼,我現在有代碼:
var ret = (from dr in defectRecordQuery
join ft in filterQuery on dr.FilterID equals ft.FilterID
join l in levelQuery on dr.LevelID equals l.LevelID
join a in attachmentQuery on dr.DefectRecordID equals a.DefectRecordID into drd
from g in drd.DefaultIfEmpty()
select new DefectRecordViewModel
{
DefectRecordCode = dr.Code,
DefectAttachmentContent = g == null ? null : g.FileContent,
LookupFilterName = ft.FilterName,
}).ToList();
的*查詢變量是IQueryable
對象,獲得相應的表的完整列表。
在drd.DefaultIfEmpty()'從克更改''到從drd.DefaultIfEmpty()克OrderByDescending(A => a.CreatedDate)。取(1)'應足以 –
@IvanStoev - 約在'select'部分改變它並添加'Take(1)',但沒有想到它'DefaultIfEmpty()'。尼斯 –