3
考慮的(簡化的)表結構是這樣的:LINQ到實體 '包含' 條款1一對多關係
[USERS]
- EMPID
- NAME
[APPOINTMENTS]
- (FK_APPT_USER)EMPID
- APPTTYPEID
- COMPLETE
每個用戶都可以擁有0 .. *約會,每一個都可以是許多APPTYPEID的之一,可以是完整的或不完整。
我想過濾IQueryable [USER]查詢的結果集,使其僅包含具有某種typeID(例如1)的appt的用戶,並且其中COMPLETE字段位於值列表中。我這樣做是作爲gridview過濾器的一部分,它允許用戶選擇僅顯示特定約會類型的已完成或未完成的用戶。
List<string> vals = new List<string> {"Y","N"}
//maybe the user has only selected Y so the above list only contains 1 element
var qry = ctx.USER.Where(x=> vals.Contains(?));
//bind etc
這是很容易做到,如果我比較反對列表中的值與用戶對象選擇1-1的關係,例如:
var qry = ctx.USER.Where(x=> vals.Contains(x.NAME));
但我不瞭解如何通過與我的約會表一樣的一對多關係來完成此任務,它讓我全神貫注地試圖爲其實體sql進行概念化。任何人都可以解釋如何做到這一點?
您可以組合'。凡()'和'。任何()'電話:' .Any(a => a.APPTYPEID == 1 && vals.Contains(a.COMPLETE))' – Bobson 2013-02-15 20:07:49
@Bobson同意,這可以結合:)我會留下尼古拉斯的味道。另外,我會檢查在兩種情況下產生的SQL查詢 – 2013-02-15 20:13:28
感謝您的快速響應!此解決方案部分運行良好 - 如果USER具有完成的類型1的約會,它將返回這些用戶。但是,如果用戶沒有任何類型1的約會,或者根本沒有任何約會,如果列表只包含「N」(這是有道理的),那麼它不會返回這些約會。我想我可能需要將它分解爲IF/ELSE來捕捉這種行爲,現在我想到了它。 – NMR 2013-02-15 20:15:17