2016-04-05 14 views
0

Ich bin in der Notwendigkeit, zwei Datentabellen zu verbinden und einige Spalten (die dynamisch ausgewählt werden) aus der verbundenen Tabelle abrufen. Ich habe die LINQ-Abfrage verwendet, um Joins durchzuführen, aber ich konnte Spaltenspalten nicht dynamisch auswählen.Dynamische Select-Abfrage in LINQ

Der Code ist:

var q = (from pd in tableOne.AsEnumerable() 
       join od in tableTwo.AsEnumerable() on pd.Field<string>(leftTableColumn) equals od.Field<string>(rightTableColumn) 
       select new 
       { 
        Column1=pd.Field<dynamic>(reuiredColumn1), 
        Column2=od.Field<dynamic>(requireColumn2) 

       }); 

hier tableOne und tableTwo sind Datentabellen. Das Problem hierbei ist, dass ich immer nur zwei Spalten (Spalte1, Spalte2) nach der Abfrage erhalten kann. Aber ich muss die Auswahl-Abfrage basierend auf der Benutzerauswahl dynamisch bilden.

Kann jemand bitte irgendeine Idee teilen, wie man dieses Resultat erreicht?

+0

Ihre Frage ist nicht sehr klar –

Antwort

0

Was möchten Sie erreichen? Ein Datenraster mit variablen benutzerdefinierten Spalten? Ist das Entity Framework oder Linq-to-SQL?

Einfache Version

  • Wenn es nicht Hunderte von Spalten ist, würde ich laden Sie einfach alle Spalten und verstecken nur die Spalten i in der GUI angezeigt werden sollen.

Hart Version

  • Wenn Sie wirklich nur ein paar Spalten aus der DB müssen geladen werden. Ich würde empfehlen, die Extension-Methodenversion von LINQ (d. H. tableOne.Select(lambda expression)) zu verwenden und die Anonymous type as an expression dynamically zu erstellen.
+0

OP verwendet 'DataTable's und [DataTableExtensions.AsEnumerable] (https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable (v = vs.110) .aspx) –

+0

Danke habe das nicht bekommen, ich werde dann den Teil über die AsEnumerable Methode löschen. –

0

Wenn ich richtig verstehe. Sie können einmal Ihre Haupttabellen auswählen und dann basierend auf einigen Bedingungen die gewünschten Spalten auswählen. Hier ist der nicht getesteten Code

var q = (from pd in tableOne 
       join od in tableTwo on pd.Field equals od.Field 
       select new 
       { 
        pd, 
        od 
       }); 

if(somecondition) 
{ 
    var q1 = from result in q 
     select q.pd.yourcoloumns; 
} 
else 
{ 
    var q1 = from result in q 
      select q.od.yourcoloumns; 
} 

In meinem Beispiel die pd und od Ihre Tabellen sind.

+0

Betrachtet die folgenden (var q1 = von Ergebnis in q wählen Sie q.pd.yourcoloums;) in Ihrem Code, wie mehrere Spalten in einer Abfrage auswählen? Ich benutze so, var q1 = aus Ergebnis in q select q.Select (i => i.pd [reuiredColumn1]); ... immer noch in der Lage, nur eine Spalte zu einer Zeit zu erhalten. –

+0

mit comman getrennt 'q.Wählen Sie (i => i.pd.Columns1, i.pd.coloumn2)' setzen Sie einen Punkt '.' nach' pd' oder 'od' –