LINQ自联接ASP.NET MVC3

时间:2011-05-27 16:19:23

标签: linq asp.net-mvc-3 self-join

我有一种情况需要在LINQ中的表上进行自联接。该表由ItemsID,Title,SeriesTitle和许多其他字段组成。一个项目可以是一个系列或成员,我可以通过查看其上有“S”或“M”字母的ItemId来判断。我需要使用ItemId“S117”检索属于系列成员的所有记录。我可以通过下面的代码在简单的SQL中执行此操作,

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'   到'System.LinQ.IQueryable< My.App.models.Items>'   存在显式转换。

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

试试这个:

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;