我在查看数据库中显示最受欢迎的标签时遇到问题。我不确定这个问题的标题,所以如果有人有更好的问题,请重命名。
情境
我需要在索引页面上显示最近的帖子,最近的画廊和最受欢迎的标签。我决定为此使用元组,并且在尝试显示最受欢迎的标签之前,它一直工作良好。
错误
传递到字典中的模型项的类型为
'System.Tuple 3[photoBlog.Models.Gallery[],photoBlog.Models.Post[],System.Linq.IGrouping
2 [System.Int32,photoBlog.Models.PostTag] []]',
但是此字典需要类型为的模型项
'System.Tuple`3 [photoBlog.Models.Gallery [],photoBlog.Models.Post [],photoBlog.Models.PostTag []]'。
如您所见,它给我的视图提供了错误的对象类型。我希望它是一个数组,但是它给了我某种System.Linq.Grouping
项。
码
如您所见,我将其转换为控制器中的数组。
public ActionResult Index()
{
photoBlogModelDataContext _db = new photoBlogModelDataContext();
var posts = _db.Posts.OrderByDescending(x => x.DateTime).Take(4).ToArray();
var galleries = _db.Galleries.OrderByDescending(x => x.ID).Take(4).ToArray();
var posttags = _db.PostTags.GroupBy(x => x.TagID).OrderBy(x => x.Count()).Take(4).ToArray();
return View(Tuple.Create(galleries, posts, posttags));
}
我的观点是直截了当的,请注意,在我尝试添加最受欢迎的标签之前,此方法一直有效。
@model Tuple<photoBlog.Models.Gallery[], photoBlog.Models.Post[], photoBlog.Models.PostTag[]>
@foreach (var tag in Model.Item3)
{
@tag.Tag.Name
}
最佳答案
你可能想要
var posttags = _db.PostTags
.GroupBy(x => x.TagID)
.OrderBy(x => x.Count())
// Take each group and pass the first tag of the group
.Select(g => g.First())
.Take(4)
.ToArray();
目前您正在通过最受欢迎标签的所有8个实例,第二受欢迎标签的所有5个实例,依此类推,每个都在各自的组中。我想您只想传递每个标签的“示例”。
关于c# - LINQ-将组转换为数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10852023/