所以我有以下LINQ查詢:高級LINQ查詢幫助
var qryVans = from v in objContext.vans
join s in objContext.schools on v.schoolID equals s.schoolID
join l in objContext.locations on v.lastKnownLocationID equals l.locationID
select new DisplayVan {
vanID = v.vanID,
vanName = v.vanName,
phone = v.phone,
capacity = (int)v.capacity,
schoolName = s.schoolName,
lastLocationName = l.locationName,
statusNote = v.statusNote,
isOffline = (v.isOffline == 1) ? true : false,
isPrayerRoom = (v.isPrayerRoom == 1) ? true : false,
isNotReady = (v.isNotReady == 1) ? true : false,
creationDate = v.creationDate,
modifiedDate = v.modifiedDate,
vanAssignments = from a in v.vanAssignments
where a.vanID == v.vanID
select a
};
所有工作正常,但我需要填補VanAssignment
實體的導航屬性。請注意,在我的DisplayVan
投影中,我使用嵌套查詢來收集給定麪包車的麪包分配。 vanAssignment
實體有一個人實體。那麼如何在這個查詢中加載vanAssignment.person
屬性?
另外,我可以寫這個更有效嗎?
感謝您的幫助!
編輯
這裏就是我上面的代碼失敗:
後,我在查詢執行toList()以上,我會嘗試訪問所需要的人是這樣的:
List<DisplayVan> lstVans = qryVans.toList<DisplayVan>();
foreach(DisplayVan objVan in lstVans) {
Console.WriteLine(objVan.person.firstName);
}
現在,由於我沒有使用vanAssignment實體加載person實體,因此person導航屬性爲null,並且會引發錯誤。
我的問題圍繞正確的方式加載這個人實體以及vanAssignment?
希望有所幫助。
這不是問題的答案,但(v.isOffline == 1)? true:false不是必需的。只需使用(v.isOffline == 1),因爲它是一個布爾值。不需要條件表達式。 – 2011-02-13 16:47:34
我不明白這個問題。你能否顯示你使用的代碼,哪裏出錯? – 2011-02-13 16:49:07