2

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

这是可行的还是我对 LINQ 有很多要求?

4

4 回答 4

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]));
于 2012-09-06T14:49:56.813 回答
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();
于 2012-09-06T14:51:36.247 回答
2

你可以使用这个:

var values = row.Table.Columns.Cast<DataColumn>()
                .Where(x => x.ColumnName.StartsWith("FK"))
                .Select(x => row[x].ToString())
                .ToArray();
于 2012-09-06T14:51:37.307 回答
2
var sa = (from DataColumn x in row.Table.Columns
          where x.ColumnName.StartsWith("FK")
          select row[x].ToString()).ToArray();

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

于 2012-09-06T14:53:27.773 回答