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