我在查看数据库中显示最受欢迎的标签时遇到问题。我不确定这个问题的标题,所以如果有人有更好的问题,请重命名。

情境

我需要在索引页面上显示最近的帖子,最近的画廊和最受欢迎的标签。我决定为此使用元组,并且在尝试显示最受欢迎的标签之前,它一直工作良好。

错误


  传递到字典中的模型项的类型为
  '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/

10-09 03:25