2009-06-17 10 views
0

Ich verwende Linq zu SQL als Datenzugriffsebene in ASP.NET MVC-Anwendung. Das Abfrageergebnis ist also ein stark typisiertes Objekt. Wie kann ich dynamisch festlegen, welches Feld auf der Seite angezeigt werden soll?LINQ to SQL, wie Wert nach Feldname

Zum Beispiel kann das Abfrageergebnis hat die folgenden Felder: Vorname Name Adresse Tel

Meine Frage ist, wenn ein Benutzer möchte die Nachname zeigen und Vorname. 2. Benutzer möchte die Adresse und den Vornamen, 3. usw. anzeigen ... Unterschiedlicher Benutzer hat andere Anforderungen. Wie kann ich die Datenbank abfragen/das Ergebnis basierend auf den spezifischen Anforderungen des Benutzers filtern (auf Anfrage)?


Um genauer zu sein, ist das Abfrageergebnis eine Reihe von Personeninformationen.

public class Person 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public string Tel {get;set;} 
    public string Tel {get;set;} 
} 
+0

Sie müssen mir eine bessere Erklärung geben, was Sie versuchen zu erreichen. Was meinst du mit "erhalte das Ergebnis basierend auf anderen Anforderungen als dem Nutzer?" –

Antwort

0

Verwenden Sie eine if-Anweisung basierend auf Benutzereingaben. Ich gehe davon aus Sie Präferenz des Nutzers irgendwo gespeichert werden, wobei in diesem Fall der folgende Code den Trick tun würde:

if (showAddress) 
{ 
    var results = from u in Users 
        select new 
        { 
         FirstName = u.FirstName; 
         LastName = u.LastName; 
         Address= u.Address; 
        } 
    // Code to display results goes here 
} 
else 
{ 
    var results = from u in Users 
        select new 
        { 
         FirstName = u.FirstName; 
         LastName = u.LastName; 
        } 
    // Code to display results goes here 
} 
+1

Danke für die Lösung. Aber es scheint ein wenig ungeschickt und was ist, wenn es viele Felder und viele verschiedene Kombinationen gibt? – Smallville

1

1) Benutzer in der Benutzeroberfläche zeigt an, was der Benutzer den Controller sehen
2) ergibt sich wünscht, interpretiert dies und speichert diese für eine spätere
3) der Steuerung an den DAL geht und ruft die Daten aus dem DAL
4) der Regler modifiziert dann das Rückergebnis irgendwie entsprechend # 2
5) die Steuerung gelangt dann die geänderten Daten an die UI
6) Die UI rendert die Daten

Ich denke, Ihre disconnect bei 4 beginnen und können bis zum 6.

Die Tatsache erweitern ist, dass es buchstäblich Tausende von Möglichkeiten, dies zu tun. Hier ist eine Möglichkeit, es in erstaunlich C# -artigen Pseudocode zu tun.

Zuerst würde ich ein Ansichtsmodell erstellen, das Informationen darüber enthält, was ich dem Benutzer anzeigen möchte.

Original-Linq to Sql (abgekürzt):

public class Person 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public string Tel {get;set;} 
} 

Meine Ansicht Modell:

public partial class PeopleView 
{ 
    public bool ShowFirstName {get;set;} 
    public bool ShowLastName {get;set;} 
    public bool ShowTel {get;set;} 
    public IEnumerable<Person> People {get;set;} 
} 

Die Controller-Methode, die das Modell PREPS:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult PersonDetails(bool showFirstName, 
    bool showLastName, bool showTel) 
{ 
    var viewData = new PeopleView() 
    { 
     ShowFirstName = showFirstname, 
     ShowLastName = showLastName, 
     ShowTel = showTel, 
     People = Dal.GetPeople() 
    }; 

    return View(viewData); 
} 

Und hier ist die Ansicht:

<% foreach(var item in ViewData.Model.People){ %> 
    <% if(ViewData.Model.ShowFirstName) {%> 
    <%= item.FirstName %><br/> 
    <% } %> 
    <% if(ViewData.Model.ShowLastName) {%> 
    <%= item.LasttName %><br/> 
    <% } %> 
    <% if(ViewData.Model.ShowTel) {%> 
    <%= item.Tel %><br/> 
    <% } %> 
<% } %> 
+0

Hallo, Will, danke für die Antwort. Aber ich suche nicht danach.Meine Frage ist, ob ein Benutzer den Nachnamen und den Vornamen anzeigen möchte. 2. Benutzer möchte Adresse und Vorname, 3. usw. anzeigen ... Verschiedene Benutzer haben unterschiedliche Anforderungen. Wie kann ich die Datenbank abfragen/das Ergebnis basierend auf den spezifischen Anforderungen des Benutzers filtern (auf Anfrage)? – Smallville

+0

Meine Antwort war, alle Daten zu erhalten, sie dann mit den Benutzereinstellungen zusammenzuführen und entsprechend anzuzeigen. Ich schätze, Sie haben nach weiteren Filtern in der Pipeline gesucht. – Will