【问题标题】:LINQ Include command mvc3 and webgridLINQ 包含命令 mvc3 和 webgrid
【发布时间】:2013-10-13 08:08:33
【问题描述】:

我正在做一个类似于亚马逊礼品卡系统的 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 语句,但我是新手,所以它不起作用。怎么才能带上所有的卡信息,但只有最新的状态?谢谢

【问题讨论】:

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


    【解决方案1】:
    cardStatus 
    

    是卡片对象所有状态的集合,对吧?我会在您的 Card 类中添加一个属性:

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

    如果您需要多次访问最后一个状态,这将很有用。 比你可以像这样在 WebGrid 中添加列:

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

    您也可以使用 LINQ 查询来解决您的问题。在此处获取有关此外观的帮助:MSDN: 101 LINQ Samples(尤其是加入运算符将很有用:LINQ - Join Operators

    托马斯

    【讨论】:

    • 嗨,Thomas,感谢您的回答,因为我不太使用 LINQ 查询,所以我使用了您的第一个解决方案,效果很好,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2011-06-20
    • 2011-11-04
    • 2011-02-21
    • 2012-05-05
    • 2012-12-01
    相关资源
    最近更新 更多