0

Amazonギフトカードシステムに似たasp.net mvc3アプリケーションを実行しています。モデルUsers、cardStatus、paymentMethod、およびcardHistoryに関連するCardsという名前のモデルがあります。すべてのカードのデータ (作成者、初期金額、ステータス) を表示するグリッドを作成しています。データを表示するために WebGrid を使用しています。カードは、コントローラを追加すると、asp が次のコードを生成したときに、複数のステータスを持つことができます。

public ViewResult Index()
    {
       var cards= db.cards.Include(t => t.cardStatus).Include(t => t.paymentMethod).Include(t => t.users);           

       return View(cards.ToList());
    }

問題は、webgrid で最新のカード ステータスを表示する必要があることですが、生成されたクエリはすべてのステータスを取得するため、webgrid で「列 cardStatus.status.name が存在しません」というエラーが表示されます。ここで私の webgrid コード:

@grid.GetHtml(
        headerStyle: "header",
        tableStyle: "table table-striped table-bordered table-hover",
        columns: new[] {
            grid.Column("cardId", header: "Card"),
            grid.Column("user.ID", header: "Creator"),
            grid.Column("initialAmount", header: "Amount"),
            grid.Column("cardStatus.status.name", header: "Status")
        }

)いくつかのLINQステートメントを試しましたが、初めてなのでうまくいきませんでした。すべてのカード情報を最新のステータスのみで表示するにはどうすればよいですか? ありがとう

4

1 に答える 1

0
cardStatus 

カードオブジェクトのすべてのステータスのコレクションですよね? Card クラスにプロパティを追加します。

public partial class Card {
    public CardStatus LastStatus
    {
        get
        {
            return cardStatus.Last();
        }
    }
}

これは、最後のステータスに複数回アクセスする必要がある場合に役立ちます。次のように WebGrid に列を追加できます。

grid.Column("LastStatus.name", header: "Status")

LINQ-Query を使用して問題を解決することもできます。ここを参照してください: MSDN: 101 LINQ サンプル(特に結合演算子が役立ちます: LINQ - Join Operators )

トーマス

于 2013-10-06T20:40:33.827 に答える