2011-05-23 51 views
2

我已經建立了基於第三個表的多對多關係,第三個表只保存一對關鍵值。現在我想要做一個查詢,將左側的右側表格鍵值分組而不需要其他數據。從EF協會只提取關鍵值

LeftTable { LeftID, LeftField1, LeftField2 } 
JoinTable { LeftID, RightID} 
RightTable { RightID, RightField1, RightField2 } 

有什麼辦法基本上只是查詢JoinTable,並得到所有的「RightIDs」由「LeftIDs」沒有SQL試圖獲取從兩邊的領域進行分組? JoinTable在模型中不是一個實體,而是映射到關聯。

我已經使用ObjectQuery和EntityCommand(ESQL)進行了一些實驗,並且通過加入到我不需要的RightTable中,兩者似乎仍然在其他字段中加載。

我ESQL看起來像:

SELECT lt.LeftID, (SELECT rt.RightID 
FROM NAVIGATE(lt, MyModel.LeftToRightAssoc, RightTable) as rt) 
FROM MyEntities.LeftTable as lt; 

但是生成的SQL在RightField1和RightField2仍然獲取。

當然,必須有一個更簡單的方法來做到這一點?

回答

1

假設你Left類有一個導航屬性RightsRight實體的集合),你可以試試這個:

var list = context.Lefts.Select(l => new 
{ 
    LeftId = l.LeftId, 
    RightIds = l.Rights.Select(r => r.RightId) 
}); 

foreach (var item in list) 
{ 
    Console.WriteLine("LeftId = {0}", item.LeftId); 
    foreach (var rightId in item.RightIds) 
    { 
     Console.WriteLine("RightId = {0}", rightId); 
    } 
} 

你會得到匿名類型對象的集合,其中每個元素具有LeftId和收集相應的RightIds。此查詢不應觸及其他字段,如RightField1等。除了匿名類型,您還可以創建自己的自定義類型,然後在上述查詢中投影到此類型中。