2016-04-22 7 views
0

Ich habe ein MVC-Projekt erstellt. Es gibt eine Standardansicht und einen Controller. Es gibt ein Modell, das erweitert wurde, um zwei reale Tabellen und eine Ansicht (DB-Ansicht) abzudecken. Diese Ansicht und mindestens eine der Tabellen müssen NACH dem Sortieren der Daten angezeigt werden. Ich sehe nur "einfache" Beispiele für die Online-Erstellung von Modellen. Ich bin mir nicht sicher, welche Wörter ich suchen soll. So habe ich eine Klasse in einer eigenen Datei, die die Spalten in einer db-Ansicht definiertASP.NET MVC-Modelle, die Tabellendaten bestellen

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; } 
     } 
    } 

ich eine Modelldefinition haben, der diese Klasse verweist:

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); 
      } 
     } 
    } 

Ich kann die index.cshtml Ansicht gehen in und sagen

@model IEnumerable<ITG_Calendar_Reservations.Models.DockItemsByDept> 

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

aber ich bekomme nur die Standard-Bestellung der DB generiert. Ich möchte, dass diese "Ansicht" -Daten nach dem Feld Code und dann nach dem Feld Name sortiert werden, aber ich habe keine Ahnung, wo solch eine Operation oder ein Filter angewendet werden sollte. I dachte das wäre in dem Modell, aber ich sehe nicht, wo es gehen sollte und ich finde nichts nützliches, wenn ich nach einer Antwort suche.

Ideen?

+1

Ihr 'XYZModel' ist hier nicht wirklich ein Modell, es ist ein Kontext, der dazu dient, den Zustand der Modelle zwischen Ihrem Programm und der Datenbank zu verwalten. Sie können es "XYZContext" nennen. Es kann die Dinge ein wenig leichter verständlich machen. – casperOne

+0

uh, ok. Ich diskutiere Sie überhaupt nicht darüber. Visual Studio nannte es ein "Modell" und gab ihm diesen Namen, als es die anfängliche DB-Verbindung einrichtete. –

Antwort

2

Try this:

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

Alternativ können Sie auch das Modell sortieren, bevor Sie es in die Ansicht zu senden.

+0

Cool! Danke. Wie sortieren Sie vor dem Senden an die Ansicht? –

+2

Auf die gleiche Weise verschieben Sie einfach den Bestellcode an die Stelle, an der Sie Daten aus der Datenbank abrufen, um Model zu füllen. Obwohl Ihr * Code * gleich aussieht, wird die Reihenfolge tatsächlich in der Datenbank passieren, was effizienter sein kann, wenn Sie es in einer Zeile wie 'myModel = db.DockItemsByDepts.OrderBy (m => m.Code) .ThenBy (m => m.Name) ' –

+0

Es tut mir leid, ich weiß, ich muss dick sein, aber du hast gesagt" verschiebe den Bestellcode dorthin, wo du Daten aus der Datenbank ziehst ". Ich schaue auf den Code oben und ich sehe nicht, wo dieser Ort ist/sein sollte. Es scheint alles hinter den Kulissen zu geschehen. –

1

sollten Sie in der Lage sein, Linq zu verwenden, um die Ausgabe zu bestellen, wie

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