2012-10-22 86 views
1

从控制器创建MVC 3视图。我的模型“MyList”包含大量的记录。MVC 3控制器GroupBy查看错误

var model = _db.MyList.GroupBy(r => r.myKey); 

,我发现了错误:“传递到字典的模型产品类型‘System.Collections.GenericlList’1 ...但是这字典当我使用下面的LINQ语句来创建我的模型需要型“System.Collections.Generic.IEnumerable”的模型项...

在视图我在第一行下面的代码:

@model IEnumerable<MyApp.Models.MyList> 

我试图返回

return View(model.ToList()); 

从控制器,但没有喜悦。我错过了什么?

回答

0

model.ToList()将返回List<T>其中T是MyList。您的型号是直式MyList。如果上面的var声明已经返回MyList,那么只需执行return View(model)

+0

谢谢你的回应。当我执行'返回视图(模型)'时,我收到上述错误。 – soulia

0

的GroupBy返回IGrouping<TKey, TSource>的集合,而不是MyList(这是奇怪的,反正,你不会有一个列表的列表。

,它甚至没有多大意义,一个GroupBy转换成一个列表不管怎么说。?你的意思是在实际工作OrderBy

+0

OrderBy返回的记录过多 - GroupBy返回单个键的子集,例如,每个键都有几行。也许我应该在OrderBy的键上使用DISTINCT? – soulia

+0

@soulia - 不,Groupby会返回同样多的记录,但它在多个组中都会这样做。记录的总数应该相同。我不能说使用Distinct会更好,因为我不知道您的数据模型或您的要求。 –

+0

谢谢!我想要做的只是返回记录的子集。例如,如果我的设置是这样的: -ID子键名年龄 -110汤姆20 -2 10弗雷德21 -3 11 30仙-4 12吉尔32 我的结果集是10,11 ,12 – soulia

0

这一次整个上午都干吗老盯住我,我发现在下面的帖子中回答我的问题:

Linq Distinct() by name for populate a dropdown list with name and value

我基本上返回以下:

public static IEnumberable<MyModel> FindTheKeys(this IQueryable<MyModel> myList) 
{ 
    return myList.OrderBy(r => r.AreaKey); 
} 

,然后执行选择如在上述柱表示。

var model = _db.MyModel.FindTheKeys().GroupBy(r => r.AreaKey).Select(g => g.First());