2013-05-09 54 views
0

我想组年从DB这是我MVC和LINQ GROUPBY年

public ActionResult YearNewsList() 
     { 
      var YearsList = db.tble_news.GroupBy(x => x.content_show_date.Value.Year).Distinct(); 
      return PartialView(YearsList); 
     } 
    and on view 


@model IEnumerable<invensys.Models.tble_news> 



    @foreach (var item in Model) { 

       @Html.DisplayFor(modelItem => item.content_show_date.Value.Year) 

     } 

但是当我运行此我得到以下

模型项目传入该字典的类型为 'System.Data.Entity.Infrastructure.DbQuery 1[System.Linq.IGrouping 2 [System.Int32,invensys.Models.tble_news]]', ,但该字典需要 类型的模型项'System.Collections.Generic。 IEnumerable`1 [invensys.Models.tble_news]”。

许多在此先感谢 碎甲弹

+0

什么类型是“无功YearList”? – 2013-05-09 09:27:44

回答

0

GroupBy返回IEnumerable<IGrouping<TKey, TSource>>对象,你尽量做到IEnumerable<TSource>

在你的情况,你应该定义视图模型

@model IEnumerable<IGrouping<int, invensys.Models.tble_news>>

如果您x.content_show_date.Value.Year类型为int。

然后你就可以像这样显示的相关信息:

 @foreach (var groupItem in model) 
     { 
      @Html.DisplayFor(groupItem.Key) 
      //some code to display groupitems by loop groupItem 
     } 
+0

谢谢大家,但Jarvan你的方法做了很多谢绝 Hesh – hesh 2013-05-09 10:25:16

0

.Distinct()将返回disctint 分组(所有分组)。 如果你想一年受到任何invensys.Models.tble_news来表示,而不是.Distinct,()使用

.Select(grouping => grouping.First())