2016-04-22 39 views
0

我已經創建了一個MVC項目。有一個默認的視圖和控制器。有一個模型已經擴展到包含兩個真實表格和一個視圖(數據庫視圖)。在排序數據後,該視圖和至少一個表格需要顯示。我只看到在線創建模型的「簡單」例子;我不確定要搜索什麼字詞。所以,我在自己的文件中的類定義了數據庫視圖訂購表格數據的ASP.NET MVC模型

using System.Data.Entity; 

    namespace XYZ_dbo.Models { 
     using System; 
     using System.Collections.Generic; 
     using System.ComponentModel.DataAnnotations; 
     using System.ComponentModel.DataAnnotations.Schema; 
     using System.Data.Entity.Spatial; 
     using System.Linq; 
     using System.Text; 

     [Table("dbo.DockItemsByDept")] 
     public partial class DockItemsByDept 
     { 
      public int Id { get; set; } 

      [Required] 
      [StringLength(128)] 
      public string Name { get; set; } 
      public int Dept { get; set; } 
      public int Code { get; set; } 
     } 
    } 

我有這個類引用模型定義的列:

using System.Data.Entity; 

    namespace XYZ.Models 
    { 
     public partial class XYZModel : DbContext 
     { 
      public XYZModel() 
       : base("name=XYZModel") 
      { 
      } 

      public virtual DbSet<DockItemsByDept> DockItemsByDept { get; set; } 

      protected override void OnModelCreating(DbModelBuilder modelBuilder) 
      { 
       modelBuilder.Entity<DockItemsByDept>() 
        .Property(e => e.Id); 
       modelBuilder.Entity<DockItemsByDept>() 
        .Property(e => e.Name) 
        .IsUnicode(false); 
       modelBuilder.Entity<DockItemsByDept>() 
        .Property(e => e.Dept); 
       modelBuilder.Entity<DockItemsByDept>() 
        .Property(e => e.Code); 
      } 
     } 
    } 

我可以進入index.cshtml視圖並說

@model IEnumerable<ITG_Calendar_Reservations.Models.DockItemsByDept> 

    <div class="content"> 
     @foreach (var log in Model) 
     { 
      <p>@log.Name</p> 
     } 
    </div> 

但我只是得到數據庫生成的默認排序。我希望這個「查看」數據按Code字段和Name字段排序,但我不知道應該在哪裏應用這樣的操作或過濾器。我認爲這將是在模型中,但我沒有看到它應該去哪裏,當我搜索答案時,我沒有找到任何有用的東西。

想法?

+1

這裏的'XYZModel'實際上不是一個模型,它是一個用於管理程序和數據庫之間模型狀態的上下文。你可能想把它叫做'XYZContext'。它可能會讓事情變得更容易理解。 – casperOne

+0

恩,好的。我根本不是在辯論你。 Visual Studio將其稱爲「模型」,並在設置初始數據庫連接時爲其指定名稱。 –

回答

2

試試這個你應該能夠使用LINQ命令的輸出:

@foreach (var log in Model.OrderBy(m => m.Code).ThenBy(m => m.Name)) 

或者,您可以將它發送到視圖之前的型號排序。

+0

酷!謝謝。在發送到視圖之前如何排序? –

+2

幾乎相同的方式,只需將訂購代碼移至您從數據庫中提取數據以填充模型的位置。雖然你的*代碼看起來是一樣的,但是如果你在像myModel = db.DockItemsByDepts.OrderBy(m => m.Code)這樣的行中執行,那麼排序實際上會發生在數據庫中,這可能會更高效。ThenBy(m => m.Name)' –

+0

對不起,我知道我一定很厚,但你說「將訂購代碼移到你從數據庫中提取數據的地方」。我看了上面的代碼,並沒有看到那個地方是/應該在哪裏。這似乎都發生在幕後。 –

1

根據需要

foreach (var log in Model.OrderBy(m => m.Code).ThenBy(m => m.Name))