集团在LINQ的年份

时间:2013-05-09 09:17:35

标签: c# asp.net-mvc linq

我正在尝试显示按年份分组的元素列表。

这是我在控制器中所做的:

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

这就是我在视图中所做的事情

@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]'。

2 个答案:

答案 0 :(得分: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
        }

答案 1 :(得分:0)

.Distinct()将返回disctint 分组(所有分组)。 如果你希望年份由任何invensys.Models.tble_news代表,而不是.Distinct()使用

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