2011-05-27 46 views
2

我有一種情況,我需要在LINQ中的表上進行自加入。該表由字段ItemsID,標題,SeriesTitle和許多其他字段組成。一個項目可以是一個系列或成員,我可以通過查看具有「S」或「M」字母的ItemId來告訴它。我需要檢索所有屬於ItemId「S117」系列成員的記錄。我可以通過下面的代碼簡單的SQL做到這一點,LINQ自我加入ASP.NET MVC3

select i.Series_Title, i.Item_ID, i2.Item_ID as Member_ID, 
     i2.Title as Member_Title, i2.Series_Title as Member_Series_Title 
     from Items i join Items i2 on i.Series_Title = i2.Series_Title 
     where i.Item_ID = "S117" 

現在,我翻譯成LINQ此查詢肚裏作爲

items = _dataContext.Items.AsQueryable(); 
items = from series in items 
     join members in items on series.Series_Title.ToLower() 
     equals members.Series_Title.ToLower() 
     where series.Item_ID.ToLower().Equals(itemId) 
     select series; 

此查詢的最後一行select series將只檢索系列,但不成員和我也需要成員。 我使用MVC3 Razor視圖在那裏我有顯示,所以我沒有使用select new {....} 甚至當我試圖用select new {series, members}幾乎所有領域,我得到這個例外 -

無法隱式轉換類型 「System.Linq的.IQueryable' to'System.LinQ.IQueryable < My.App.models.Items>' 存在顯式轉換。

任何建議將不勝感激。

+1

項目 - 試圖用別的將無法取代它。您可以選擇一個新的集合,而不是替換現有的集合。 – GalacticCowboy 2011-05-27 16:53:59

回答

1

試試這個:在編譯時被確定爲一個IQueryable

var items1 = _dataContext.Items.AsQueryable(); 
var items2 = from series in items1 
     join members in items1 on series.Series_Title 
     equals members.Series_Title 
     where series.Item_ID== 'S117' 
     select series;