不确定这是否可行,但我有一个 DataRow row
,我想检索列名以“FK”开头的所有值的字符串数组。
这是可行的还是我对 LINQ 有很多要求?
怎么样:
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]));
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();
你可以使用这个:
var values = row.Table.Columns.Cast<DataColumn>()
.Where(x => x.ColumnName.StartsWith("FK"))
.Select(x => row[x].ToString())
.ToArray();
var sa = (from DataColumn x in row.Table.Columns
where x.ColumnName.StartsWith("FK")
select row[x].ToString()).ToArray();
这里的逻辑是获取名称以“FK”开头的那些列的序列,然后对于其中的每一个,选择该列的行值,将其转换为字符串,然后从结果中创建一个数组。如果您不需要实际的数组,则不要使用.ToArray()
和 额外的一组括号。