gpt4 book ai didi

c# - 使用 LINQ 区分数据表中的所有列并存储到另一个数据表

转载 作者:行者123 更新时间:2023-12-05 09:21:40 24 4
gpt4 key购买 nike

我有一个包含 10 多个列的数据表,我想区分所有列,然后将结果存储到另一个数据表。

有没有什么方法可以在不命名所有列的情况下使用 LINQ 来区分数据表中的所有列?

我试过下面的代码,但它只给出一行。请给我任何关于这个案例的建议。

DataTable dtPurchaseOrder = new DataTable();
DataTable dt = new DataTable();
dt.Columns.Add("PONumber");
dt.Columns.Add("Customer");
dt.Columns.Add("Address");
dt.Rows.Add("PO123456", "MH", "123");
dt.Rows.Add("PO123456", "MH", "123");
dt.Rows.Add("PO654321", "AB", "123");
dt.Rows.Add("PO654321", "AB", "123");

foreach (DataRow r in dt.Rows)
{
var lstPO = (from row in dtPurchaseOrder.AsEnumerable()
select row.Field<string>("PONumber")).Count();
if (lstPO == 0)
dtPurchaseOrder.Rows.Add(r.ItemArray);
}

dtPurchaseOrder.AcceptChanges();

最佳答案

解决方案一:

最简单的解决方案是 DefaultView.ToTable

dt.DefaultView.ToTable(true, "PONumber", "Customer", "Address");

解决方案 2:

另一种选择是使用 Linq 语句来过滤不同的行,然后根据需要循环它们。

var result =  dt.AsEnumerable()
.Select(row => new {
PONumber = row.Field<string>("PONumber"),
Customer = row.Field<string>("Customer"),
Address = row.Field<string>("Address")
}).Distinct();

解决方案 3:

使用定义的 PrimaryKey 检查是否存在的传统方法。

var ponum = dtPurchaseOrder.Columns.Add("PONumber");
var cust = dtPurchaseOrder.Columns.Add("Customer");
var address = dtPurchaseOrder.Columns.Add("Address");


dtPurchaseOrder.PrimaryKey = new[] {ponum, cust, address};

dt.Rows.Add("PO123456", "MH", "123");
dt.Rows.Add("PO654321", "AB", "123");
dt.Rows.Add("PO654321", "AB", "123");



foreach (DataRow r in dt.Rows)
{
var exisiting = dtPurchaseOrder.Rows.Find(r.ItemArray);

if (exisiting == null)
{
dtPurchaseOrder.Rows.Add(r.ItemArray);
}
}

工作 Sample

关于c# - 使用 LINQ 区分数据表中的所有列并存储到另一个数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com