Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ区分数据表中的所有列并存储到另一个数据表_C#_Linq - Fatal编程技术网

C# 使用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.

我有一个超过10列的datatable,我想区分所有列,然后将结果存储到另一个datatable

有没有办法通过使用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();
解决方案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?