2011-05-27 44 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;