Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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_Datatable - Fatal编程技术网

C# 将数据表每行的每一列传递给使用Linq的方法?

C# 将数据表每行的每一列传递给使用Linq的方法?,c#,linq,datatable,C#,Linq,Datatable,我正在寻找一种避免任务的嵌套foreach循环的方法。我想为datatable的每一列和每一行将列名和列值传递给一个方法。该方法用于日志记录。我希望名称和值作为流程的一部分连接起来,以便生成的字符串是日志消息字符串参数。此外,我希望数据表的结构是未知的。我想林克可以做到这一点。然而,在写了datatable.AsEnumerable()之后,我的头脑一片空白 您可以使用每个DataRow的ItemArray来处理每行中的所有列值 首先将所有列名收集在一起,这样您就不必继续这样做: var col

我正在寻找一种避免任务的嵌套foreach循环的方法。我想为datatable的每一列和每一行将列名和列值传递给一个方法。该方法用于日志记录。我希望名称和值作为流程的一部分连接起来,以便生成的字符串是日志消息字符串参数。此外,我希望数据表的结构是未知的。我想林克可以做到这一点。然而,在写了datatable.AsEnumerable()之后,我的头脑一片空白

您可以使用每个
DataRow
ItemArray
来处理每行中的所有列值

首先将所有列名收集在一起,这样您就不必继续这样做:

var colnames = dt.Columns
                 .Cast<DataColumn>()
                 .Select(dc => dc.ColumnName)
                 .ToList();
如果要将结果传递给日志功能,只需使用
foreach
SelectMany
将结果展平:

foreach (var msg in ans.SelectMany(r => r))
    LogData(logType, msg);

为什么不能传递数据表或行集合?两者都有所有行。目标是将每个列名和值传递给一个日志方法,这样我就得到了日志条目=。因此,linq I envision的一部分是在将名称和值作为日志消息传递时将它们连接在一起。请参阅,这种信息在post中很重要(以及现有的工作),比如我要调用的方法是LogData(int logType,string message)。可以在第二个linq语句中的某个地方添加该方法吗?假设您将logType作为范围中的变量,消息将等于插入的字符串。
foreach (var msg in ans.SelectMany(r => r))
    LogData(logType, msg);