1

データベースから最も人気のあるタグを表示するのに問題があります。この質問のタイトルについてはよくわかりません。誰かがより良いものを持っている場合は、名前を変更してください。

シナリオ

最近の投稿、最近のギャラリー、最も人気のあるタグをインデックスページに表示する必要があります。これにはタプルを使用することにしましたが、最も人気のあるタグを表示しようとするまでは問題なく機能しました。

エラー

ディクショナリに渡されるモデルアイテムのタイプは「System.Tuple2 3[photoBlog.Models.Gallery[],photoBlog.Models.Post[],System.Linq.IGrouping[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
}
4

3 に答える 3

3

あなたはおそらくしたい

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つのインスタンスすべて、2番目に人気のある5つのインスタンスすべてなどを、それぞれ独自のグループで渡します。各タグの「例」を渡したいだけだと思います。

于 2012-06-01T14:28:07.547 に答える
1

キャストの問題を完全に回避するつもりはありませんが、少し単純化してみてはどうでしょうか。

public class PopularStatsViewModel{
  public Gallery[] Galleries { get; set; }
  public Post[] Posts { get; set; }
  public PostTags[] Tags { get; set; }
}

PopularStats インスタンスを新しく作成し、プロパティを db 呼び出しの結果に設定します。次に、あなたの見解で:

@model photoblog.Models.PopularStatsViewModel

これにより、キャスティングの問題を回避できますが、さらに重要なことに、テストが少し簡単になり、その統計オブジェクトのリファクタリング/拡張の自由度が少し高まります。 VM プロパティにアクセスしています。

于 2012-06-01T14:28:48.620 に答える
0

に変更photoBlog.Models.PostTag[]してみてくださいIGrouping<TagIDType, photoBlog.Models.PostTag>[]

于 2012-06-01T14:28:06.093 に答える