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

时间:2018-03-08 20:42:23

标签: c# linq datatable

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

1 个答案:

答案 0 :(得分:1)

您可以使用每个add_action( 'woocommerce_single_product_summary', 'wc_product_sold_count', 11 ); function wc_product_sold_count() { $get_current_pro_id = $_SESSION["iddd"]; global $product; $current_user = wp_get_current_user(); if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product->get_id() ) ) { $units_sold = get_post_meta( $product->id, 'total_sales', true ); //echo '<p>' . sprintf( __( 'Units Sold: %s', 'woocommerce' ), $units_sold ) . '</p>'; return $units_sold; } } 的{​​{1}}来处理每行中的所有列值。

首先收集所有列名,因此您不必继续这样做:

ItemArray

然后将列名与每行的行值组合在一起:

DataRow

如果您想将结果传递给日志记录功能,只需使用var colnames = dt.Columns .Cast<DataColumn>() .Select(dc => dc.ColumnName) .ToList(); var ans = dt.AsEnumerable() // foreach DataRow in DataTable .Select(r => r.ItemArray // foreach item in DataRow.ItemArray .Zip(colnames, // foreach colname in DataTable.Columns.ColumnName (item, colname) => $"{colname} = {item}") // ColumnName: ColumnValue ); 来展平:

foreach