Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据行上的复杂LINQ_C#_Linq - Fatal编程技术网

C# 数据行上的复杂LINQ

C# 数据行上的复杂LINQ,c#,linq,C#,Linq,不确定这是否可行,但我有一个DataRowrow,我想检索列名以“FK”开头的所有值的字符串数组 这是可行的还是我要问LINQ的很多问题?怎么样: DataRow row = ... var values = from DataColumn column in row.Table.Columns where column.ColumnName.StartsWith("FK") select Convert.ToString(row[colum

不确定这是否可行,但我有一个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]));
var result=row.Table
.栏目
.Cast()
.Where(column=>column.ColumnName.StartsWith(“FK”))
.ToDictionary(column=>column.ColumnName,
column=>Convert.ToString(行[列]);
DataTable dt=new System.Data.DataTable();
dt.列。添加(“FKStuff”);
dt.列。添加(“其他内容”);
添加(“FKAndMoreStuff”);
var行=dt行。添加(“ABC”、“DEF”、“GHI”);
var vals=dt.Columns.Cast()。其中(c=>c.ColumnName.StartsWith(“FK”))。选择(col=>row[col])。ToArray();
您可以使用以下方法:

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

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

如果至少有一个值不是字符串,而是其他值(可能是int),则您的操作将崩溃。使用
ToString
Convert.ToString
(如答案所示)更安全。
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();