检查数据表有另一个数据表值 - C#

时间:2014-06-09 06:29:13

标签: c# datatable

我有下面的代码,它有一个数据表dt。我还有一个名为dt1的数据表。我想在合并两个表之前检查dt是否有dt1数据。如果dt已有dt1个数据,我不想合并两个数据表。

理想情况下寻找dt.Exists(dt1)代码。

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[6] { new DataColumn("ID", typeof(int)),
                                                new DataColumn("Acount", typeof(string)),
                                                new DataColumn("Name", typeof(string)),
                                                new DataColumn("Quarter", typeof(string)),
                                                new DataColumn("FY", typeof(int)),
                                                new DataColumn("Income_percent", typeof(int))});

        dt.Rows.Add(1, "ABC", "Ram", "Q1", 2011, 50);
        dt.Rows.Add(2, "XYZ", "Hari", "Q4", 2011, 35);
        dt.Rows.Add(3, "ABC", "Rohit", "Q3", 2011, 40);
        dt.Rows.Add(4, "ABC", "Ram", "Q2", 2011, 25);
        dt.Rows.Add(5, "XYZ", "Hari", "Q3", 2011, 60);

        DataTable dt1 = new DataTable();
        dt1.Rows.Add(3, "ABC", "Rohit", "Q3", 2011, 40);
        dt1.Rows.Add(4, "ABC", "Ram", "Q2", 2011, 25);
        dt1.Rows.Add(5, "XYZ", "Hari", "Q3", 2011, 60);
    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用下面提到的代码

 var diff = dt.AsEnumerable().Except(dt1.AsEnumerable());

除非您必须添加using System.Linq命名空间。

你还必须为dt 1指定一个范围

 dt1.Columns.AddRange(new DataColumn[6] { new DataColumn("ID", typeof(int)),
                                            new DataColumn("Acount", typeof(string)),
                                            new DataColumn("Name", typeof(string)),
                                            new DataColumn("Quarter", typeof(string)),
                                            new DataColumn("FY", typeof(int)),
                                            new DataColumn("Income_percent", typeof(int))});

答案 1 :(得分:0)

看起来您的数据基于ID列。在这种情况下,您可以使用Linq来比较两个数据表:

IEnumerable<int> idsInDt = dt.AsEnumerable().Select(row => (string)row["ID"]);
IEnumerable<int> idsInDt1 = dt1.AsEnumerable().Select(row => (string)row["ID"]);

IEnumerable<int> newRows = idsInDt1.Except(idsInDt);

然后,您只需根据ID

验证计数并合并新行
if(newRows.Count > 0)
    // Copy new lines

答案 2 :(得分:0)

你可以用这个

public DataTable getLinq(DataTable dt1, DataTable dt2)
 {
   DataTable dtMerged = 
        (from a in dt1.AsEnumerable()
                join b in dt2.AsEnumerable()
                                  on 
        a["Query"].ToString() equals b["Query"].ToString()
                                into g
                      where g.Count() > 0
               select a).CopyToDataTable();
            return dtMerged;
 }

有关详细信息,请参阅here