2012-09-06 7 views
2

이것이 가능한지 확실하지 않지만 DataRow row이 있는데 열 이름이 "FK"로 시작하는 모든 값의 문자열 배열을 검색하려고합니다.Complex LINQ on DataRow

내가 할 수있는 일입니까, 아니면 많은 LINQ를 부탁합니까?

+1

적어도 하나의 값이 문자열이 아니라 다른 것이 있으면 (int가 될 수도 있음) 테이크가 충돌합니다. 여기에 나와있는 답변 에서처럼 ToString 또는 Convert.ToString을 사용하면 더 안전합니다. –

답변

4

에 대해 어떻게 : 대신지도와 같은 결과를 원하는 경우

DataRow row = ... 

var values = from DataColumn column in row.Table.Columns 
      where column.ColumnName.StartsWith("FK") 
      select Convert.ToString(row[column]); 

var valueArray = values.ToArray(); 

, 당신은 할 수 있습니다 :

var result = row.Table 
       .Columns 
       .Cast<DataColumn>() 
       .Where(column => column.ColumnName.StartsWith("FK")) 
       .ToDictionary(column => column.ColumnName, 
           column => Convert.ToString(row[column])); 
2
DataTable dt = new System.Data.DataTable(); 
dt.Columns.Add("FKStuff"); 
dt.Columns.Add("OtherStuff"); 
dt.Columns.Add("FKAndMoreStuff"); 

var row = dt.Rows.Add("ABC", "DEF", "GHI"); 
var vals = dt.Columns.Cast<DataColumn>().Where(c => c.ColumnName.StartsWith("FK")).Select(col => row[col]).ToArray(); 
2

이를 사용할 수 있습니다

var values = row.Table.Columns.Cast<DataColumn>() 
       .Where(x => x.ColumnName.StartsWith("FK")) 
       .Select(x => row[x].ToString()) 
       .ToArray(); 
2
var sa = (from DataColumn x in row.Table.Columns 
      where x.ColumnName.StartsWith("FK") 
      select row[x].ToString()).ToArray(); 

여기서 논리는 이름이 "FK"로 시작하는 열의 시퀀스를 가져온 다음 각 열의 행 값을 선택하고 문자열로 변환 한 다음 결과에서 배열을 만드는 것입니다. 실제 배열이 필요하지 않은 경우 .ToArray()과 여분의 괄호 세트는 그대로 두십시오.