我正在尝试显示按年份分组的元素列表。
这是我在控制器中所做的:
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]'。
答案 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())