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