2016-09-02 1 views
0

Я пытаюсь преобразовать этот DataTable. Выберите запрос Linq. Цель состоит в том, чтобы получить значения из столбца lookupValueFieldLing Query on DataTable с одним динамическим Where where

private object[] GetValueFromLookup(MultipleKeyConditionBuilder filter, string lookupValueField, DataTable datatableLookup) 

    { 
     object[] result; 
     DataRow[] rows = datatableLookup.Select(filter.Condition); 
     result = new object[rows.Count()]; 
     for (int i = 0; i < rows.Count(); i++) 
     { 
      result[i] = rows[0][lookupValueField]; 
     } 

     return result; 
    } 

Это запрос Linq я написал до сих пор. Условие уже определено в фильтре. фильтр содержит следующий тип значения «Project_id = 10». Как я могу использовать этот фильтр в разделе where. в настоящее время он дает ошибку. «Не может неявно преобразовать строку в BOOL»

private object[] GetValueFromLookup(MultipleKeyConditionBuilder filter, string lookupValueField, DataTable datatableLookup) 
    { 
     object[] result; 

     EnumerableRowCollection<DataRow> rows; 
     //DataRow[] rows; 
     rows = from myRow in datatableLookup.AsEnumerable() 
         where filter.Condition 
         select myRow ; 


     result = new object[rows.Count()]; 
     for (int i = 0; i < rows.Count(); i++) 
     { 
      result[i] = rows; // should give only lookupcolumn 
      //result[i] = rows[0][lookupValueField]; 
     } 

     return result; 
    } 

, наконец, я хочу, чтобы получить результат в массиве строк, а не в EnumerableRowCollection. Я хочу получить результат, как и в вышеприведенном массиве. Любая помощь будет полезна

+0

Этот вопрос был задан ранее, см [Как использовать переменную строку в LINQ, где положение] (Http: //stackoverflow.com/questions/31342172/how-to-use-a-string-variable-in-the-linq-where-clause). Вы не можете использовать строку в предложении LINQ where. – sly

+0

Спасибо за помощь –

ответ

0

Используя комбинацию LINQ и Datatable.Select метод:

private object[] GetValueFromLookup(MultipleKeyConditionBuilder filter, string lookupValueField, DataTable datatableLookup) 
{ 
    IEnumerable<Object> query = 
     from rows in datatableLookup.Select(filter.Condition) 
     select rows.Field<Object>(lookupValueField); 

    return query.ToArray(); 
} 
+0

Надеюсь, это увеличит производительность. позвольте мне попробовать это –

+0

Время выполнения такое же. Я хочу избавиться от этого datatableLookup.select. –