2012-09-06 47 views
2

不知道這是否可能,但我有一個DataRow row,我想檢索列名以「FK」開頭的所有值的字符串數組。DataRow上覆雜的LINQ

這是可行的還是我要求大部分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()和額外的一組括號。