2017-11-21 3 views
0

Ich habe ein Problem mit der Handhabung eines Modells mit doppelten Daten, wo ich jeden Eintrag in einer einzelnen Tabellenzeile in der Ansicht anzeigen möchte.C# MVC-Modelldatengruppe auf der Razor-Ansicht

z.B.

Die Modelldaten wie folgt aussehen:

User | Access 
1234 | SuperUser 
1234 | Admin 
2345 | Analyst 
3456 | Analyst 
3456 | SuperUser 

ich durch das Modell meiner Ansicht nach passieren, aber im Modell über jeden Benutzer Looping gibt mehrere Einträge pro Benutzer, ist es eine Möglichkeit, GroupBy zu verwenden, um jeden Benutzer anzuzeigen in einer einzigen Zeile, wie folgt aus:

User | Access 
1234 | SuperUser, Admin 
2345 | Analyst 
3456 | Analyst, SuperUser 
+0

Können Sie angeben, was das Modell tatsächlich aussieht? Z.B. Ist es eine List Objekte, wobei UserAccess die Felder "User" und "Access" hat? –

Antwort

1

ich es besser denken zu erstellen, wenn Sie Linq hier das Beispiel verwenden können

eine neue Ansicht Modell Klasse

public class MyNewView 
    { 
     public string User { get; set; } 
     public string Access { get; set; } 
    } 

in Ihren view-Controller hinzufügen, um dieses Linq erstellen "mylist ist Ihre doppelte vaue Liste"

var NewViewModel = mylist .select (c=> new MyNewView { 

    user = c.user , 
    Access = String.Join(",",mylist.where(x=> x.user == c.user) .select(x => x Access) .tolist())  


}).tolist() 

dann

return View(NewViewModel); 
3

Ihre Datenstruktur Klasse 2 Objekte wie dieses

public class YourClass 
{ 
    public int User { set; get; } 
    public string Access { set; get; } 
} 
012 Unter der Annahme,

Sie können eine Gruppe anhand der Eigenschaft User Ihres Objekts erstellen. Sie können die LINQ GroupBy Verfahren und in der Projektion Teil Ihrer LINQ Ausdruck verwenden, verwenden string.Join das Komma getrennte Liste Wert für die Zugriffseigenschaftswert

var flatRecords = new List<YourClass> 
{ 
    new YourClass() {User = 1234, Access = "SuperUser"}, 
    new YourClass() {User = 1234, Access = "Admin"}, 
    new YourClass() {User = 33456,Access = "Analyst"} 
}; 

List<YourClass> grouped = flatRecords.GroupBy(a => a.User, d => d, 
               (k, v) => 
      new YourClass { User = k, 
          Access = string.Join(",", v.Select(d => d.Access)) 
         }) 
            .ToList(); 
+0

Danke dafür, wie würde die LINQ ändern müssen, wenn ich noch ein paar Eigenschaften im Modell (ID & LOGIN) hatte, aber ich möchte sie nicht auf der Ansicht anzeigen. – haddow64

+1

Welche Eigenschaften Sie im Projektionsteil der LINQ-Anweisung zuordnen, wird in der Ergebnismenge festgelegt. Wenn Sie also nicht "ID" und "LOGIN" wollen, stellen Sie das nicht ein. Wenn es MVC ist, empfehle ich Ihnen dringend, ein Ansichtsmodell zu erstellen und dieses in der Projektion zu verwenden (Sie können die 'YourClass' verwenden, die ich in der Frage habe). Sie können die EF-Entitätsklassen in der LINQ-Projektion nicht verwenden. – Shyju

Verwandte Themen