2011-04-27 78 views
1

所以我有這個數據庫模型:WCF數據服務:多對多查詢

Student<->StudentClasses<->Classes 

,其中1名學生被鏈接到許多StudentClasses和一類是與許多StudentClasses。

如何編寫一個LINQ查詢來獲取鏈接到Id 1的學生的所有類?

以下查詢拋出異常 (「只能指定的查詢選項(排序依據,在那裏,拿,跳過)最後一次航行後」):

     var qry = from sc in service.StudentClasses 
         where sc.StudentId == 1 
         from c in service.Classes 
         where c.ClassId == sc.StudentId 
         select c; 
+1

這是一個simliar問題在這裏:http://stackoverflow.com/questions/5746992/linq-query-error/5747842#5747842 LINQ不支持你正在嘗試做的。因此,您需要創建多個查詢,或者展開並拉回超過您所需的數量。 – Nix 2011-04-27 16:14:07

+0

你使用LINQ to sql嗎?或另一個ORM? – TimC 2011-04-27 16:23:40

+1

他正在使用LINQ到ODATA/rest。 – Nix 2011-04-27 16:24:54

回答

0

這會工作,但它會崩潰,如果你是ID DNE。

var qry = service.StudentClasses 
       .Expand("Classes") 
       .Where(x=>x.StudentId==1) 
       .First() 
       .Classes.Select(t=>t); 
+0

有沒有比使用WCF數據服務更好的公開數據庫的方法? – Attilah 2011-04-27 16:38:31

+0

如果您正在進行簡單的瘦客戶端操作,並且沒有業務邏輯,則需要使用DataServices,如果您要執行復雜的查詢,請創建一些自定義查詢。我不喜歡客戶端數據服務的API,我不喜歡讓客戶能夠查詢我的數據/以任何他們選擇的方式更改我的數據。因此,我傾向於控制人們如何通過Web服務和數據訪問層訪問我的數據。 – Nix 2011-04-27 16:47:59