2016-05-02 11 views
-1

Мне нужно динамически генерировать запрос для доступа к определенным столбцам из datatable.C# - динамически генерировать linq

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

но это только возвращает «строка [Id], строка [UserId], строка [код]». Как получить доступ к значениям в этих столбцах?

+2

Возможный дубликат [Динамическое создание запросов LINQ] (http://stackoverflow.com/questions/9505189/dynamically-generate-linq-queries) – user3114639

+1

Почему это должно быть "динамический"? –

+0

@BiesiGrr Я получаю список столбцов для выбора только во время выполнения. – Madonna10

ответ

0

Я сомневаюсь, что эту проблему можно решить элегантно с помощью решения на основе linq. Его можно легко решить с помощью цикла и путем обращения к столбцу DataRow с помощью Item property.

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

Почему бы не поместить его в словарь? Dictionary<string, object> ключ - это имя столбца, а значение - значение столбца.

 string[] cols = new string[] { "Id", "UserId", "Code" }; 
     var result = (from DataRow row in dt.Rows 
         select cols.ToDictionary(c => c, c => row[c])); 
Смежные вопросы