C# 使用LINQ区分数据表中的所有列并存储到另一个数据表
我有一个超过10列的datatable,我想区分所有列,然后将结果存储到另一个datatable 有没有办法通过使用LINQ而不命名所有列来区分数据表中的所有列 我尝试了下面的代码,但只给出了一行。对于这个案子,请给我一些建议C# 使用LINQ区分数据表中的所有列并存储到另一个数据表,c#,linq,C#,Linq,我有一个超过10列的datatable,我想区分所有列,然后将结果存储到另一个datatable 有没有办法通过使用LINQ而不命名所有列来区分数据表中的所有列 我尝试了下面的代码,但只给出了一行。对于这个案子,请给我一些建议 DataTable dtPurchaseOrder = new DataTable(); DataTable dt = new DataTable(); dt.Columns.Add("PONumber"); dt.Columns.Add("Customer"); dt.
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();
解决方案1:
最简单的解决办法是
解决方案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();
工作解决方案1:
最简单的解决办法是
解决方案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();
工作一种在不定义列名的情况下区分表的方法
var dtPurchaseOrder = dt
.AsEnumerable()
.Distinct(DataRowComparer.Default)
.CopyToDataTable<DataRow>();
无需定义列名即可区分表的方法
var dtPurchaseOrder = dt
.AsEnumerable()
.Distinct(DataRowComparer.Default)
.CopyToDataTable<DataRow>();
为数据表定义PrimaryKey。@HariPrasad感谢您的回复。请提供有关数据表中PrimaryKey是什么的详细信息?您可以使用String.Join和行的ItemArray创建一个表示整行的字符串,然后获取该字符串的不同值。请为数据表定义PrimaryKey。@HariPrasad感谢您的回复。请提供有关Datatable中PrimaryKey是什么的详细信息?您可以使用String.Join和行的ItemArray创建表示整行的单个字符串,然后获取该字符串的不同值。感谢您的代码。我已经尝试过了,但是datatable没有绑定到我的DataGridView。我所要做的就是将dtPurchaseOrder转换回dt。这正好满足了我的需要。dt=数据表DTPurchaseOrder;谢谢你的代码。我已经尝试过了,但是datatable没有绑定到我的DataGridView。我所要做的就是将dtPurchaseOrder转换回dt。这正好满足了我的需要。dt=数据表DTPurchaseOrder;感谢您提供的所有解决方案。这很有效。然而,我得到了一个DataColumn不能为null的错误。如何允许列可以作为AllowDBNull为null?感谢您提供的所有解决方案。这很有效。然而,我得到了一个DataColumn不能为null的错误。如何允许列可以作为AllowDBNull为null?