LINQ包含命令mvc3和webgrid

时间:2013-10-06 19:49:12

标签: c# asp.net asp.net-mvc asp.net-mvc-3 linq

我正在做类似亚马逊礼品卡系统的asp.net mvc3应用程序。我有一个名为Cards的模型,它与模型Users,cardStatus,paymentMethod和cardHistory有关。我正在做一个网格,我显示所有卡片的数据(创建者,初始数量,状态)。我正在使用WebGrid来显示数据。该卡可以及时拥有多个状态,当我添加Controller时,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中显示错误“column 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语句,但我是新手,所以它不起作用。如何才能带来所有的卡信息,但只有最新的状态?感谢

1 个答案:

答案 0 :(得分:0)

cardStatus 

是Card-object的所有状态的集合,对吧?我会在你的卡级中添加一个属性:

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

如果您需要多次访问最后一个状态,那将非常有用。 您可以在WebGrid中添加列,如下所示:

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

您还可以使用LINQ-Query解决您的问题。有关这方面的帮助,请访问:MSDN: 101 LINQ Samples(特别是连接运算符非常有用:LINQ - Join Operators

托马斯

相关问题