2014-06-09 44 views
0

我有以下代碼,它有一個數據表dt。我還有一個名爲dt1的數據表。我想檢查dtdt1合併前兩個表中的數據。如果dt已經有dt1數據我不想合併兩個數據表。檢查數據表具有另一個數據表值 - C#

理想情況下尋找像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); 
    } 
} 

回答

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

0

除了必須添加using System.Linq命名空間,你可以使用下面menioned代碼

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

的。

你也必須指派一響DT1

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))}); 
+0

Except錯誤()System.Data.EnumerableRowCollection <的System.Data.DataRow>」不包含一個定義‘除了’和沒有擴展方法‘除了’接受型的第一參數‘System.Data.EnumerableRowCollection <的System.Data.DataRow>’可以找到(是否缺少一個使用指令或程序集引用?) –

+0

請參閱我的更新的ans –

+0

除非您必須使用System.Linq命名空間進行添加。 –

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 
+1

如果你在談論ID,那麼你的IEnumerable應該是int而不是字符串 –

+0

true,修正它:)謝謝 –

相關問題