DataRow上复杂的LINQ

时间:2012-09-06 14:42:14

标签: c# linq

不确定这是否可行,但我有一个DataRow row,我想要检索列名称以“FK”开头的所有值的字符串数组。

这是可行的还是我要求LINQ的大部分内容?

4 个答案:

答案 0 :(得分: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]));

答案 1 :(得分: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 :(得分:2)

你可以用这个:

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

答案 3 :(得分:2)

var sa = (from DataColumn x in row.Table.Columns
          where x.ColumnName.StartsWith("FK")
          select row[x].ToString()).ToArray();

这里的逻辑是获取名称以“FK”开头的那些列的序列,然后对于每个列,选择该列的行值,将其转换为字符串,然后从结果中生成一个数组。如果您不需要实际的数组,请不要使用.ToArray()和额外的括号。