2013-10-06 38 views
0

我正在做一個類似亞馬遜禮品卡系統的asp.net mvc3應用程序。我有一個名爲Cards的模型,它與模型Users,cardStatus,paymentMethod和cardHistory有關。我正在做一個網格,顯示所有卡片的數據(創建者,初始金額,狀態)。我正在使用WebGrid來顯示數據。該卡可以有多個狀態的時候,當我添加了控制器,ASP生成的驗證碼LINQ包括命令mvc3和webgrid

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聲明,但我在它是新所以它沒有工作。怎樣才能把所有的卡信息,但只有最新的狀態?謝謝

回答

0
cardStatus 

是卡對象的所有狀態的集合,對吧?我會在你的卡類添加屬性:

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

托馬斯

+0

喜托馬斯,謝謝您的回答,因爲我還沒有與LINQ querys工作非常多,我用你的第一個解決方案,它非常完美,非常感謝。 – VictorVZ