2016-05-02 14 views
-1

Ich muss eine Abfrage dynamisch generieren, um auf bestimmte Spalten aus einer Datentabelle zuzugreifen.C# - Linq dynamisch generieren

string cols="row[Id],row[UserId], row[Code]"; 
var result= (from DataRow row in dt.Rows 
     select cols); 

aber nur returns "row [Id], Zeile [Benutzer-ID], Zeile [Code]". Wie kann ich auf die Werte in diesen Spalten zugreifen?

+2

Mögliche Duplikat [Dynamisch LINQ-Abfragen generieren] (http://stackoverflow.com/questions/9505189/dynamically-generate-linq-queries) – user3114639

+1

Warum sollte dies "dynamisch" sein? –

+0

@BiesiGrr Ich bekomme die Liste der Spalten zur Auswahl nur zur Laufzeit .. – Madonna10

Antwort

0

Ich bezweifle, dass dieses Problem elegant mit einer Linq-basierten Lösung gelöst werden kann. Es kann sehr einfach mit einer Schleife und durch Zugriff auf die Spalte der DataRow mit der Item property gelöst werden.

public IEnumerable<object[]> GetValues(IList<string> columns, DataTable dt) { 
    foreach (var row in dt.Rows) { 
    var rowResult = new object[columns.Count]; 
    for (var col = 0; col < columns.Count; col++) { 
     rowResult[col] = row.Item[columns[col]]; 
    } 
    yield return rowResult; 
    } 
} 
0

Warum nicht in ein Wörterbuch einfügen? Dictionary<string, object> Der Schlüssel ist der Spaltenname und der Wert ist der Wert der Spalte.

 string[] cols = new string[] { "Id", "UserId", "Code" }; 
     var result = (from DataRow row in dt.Rows 
         select cols.ToDictionary(c => c, c => row[c]));