2016-09-02 4 views
0

이 DataTable Select 쿼리를 Linq로 변환하려고합니다. 그 목적은 열 lookupValueField에서 값을 가져 오는 것입니다.단일 동적 쿼리를 사용하여 DataTable에서 링 쿼리

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 절에서이 필터를 어떻게 사용할 수 있습니까? 현재 오류가 발생하고 있습니다.

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 발생 할 '암시 적으로 bool로하는 문자열을 변환 할 수 없습니다'. 위의 배열에있는 결과를 원한다. 어떤 도움이 LINQ의 조합과 Datatable.Select 방법을 사용

+0

을 참조하시기 바랍니다 (HTTP [어떻게 LINQ 절에 문자열 변수를 사용] //stackoverflow.com/questions/31342172/how-to-use-a-string-variable-in-the-linq-where-clause). LINQ where 절에서 문자열을 사용할 수 없습니다. – sly

+0

도움을 주셔서 감사합니다 –

답변

0

유용 할 것 :

이 이전에 질문이되었습니다
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를 제거하고 싶습니다. –

관련 문제