c#
  • asp.net
  • sql-server-2008
  • 2012-09-13 26 views 2 likes 
    2

    我正在向DataSet中添加兩個表,我想檢查它們是否相等。如何在asp.net中使用HashSet比較兩個DataSet c#

    我已經嘗試的代碼是:

    SqlDataAdapter mydat = new SqlDataAdapter("Select Device_Profile_Param+'='+Device_Profile_Default_Value AS SettingsCheck From Device_Profile_Master Where Device_Profile_Name = '" + Label5.Text + "'", con); 
    DataTable dt = new DataTable(); 
    mydat.Fill(dt); 
    
    DataSet dset = new DataSet(); 
    dset.Tables.Add(dt); 
    
    SqlDataAdapter mydata = new SqlDataAdapter("Select Device_Profile_Param+'='+Device_Profile_Default_Value AS Settings From Device_Profile_Master Where Device_Profile_Name = '" + For_Profile_Num.Items[i] + "'", con); 
    DataTable dt2 = new DataTable(); 
    mydata.Fill(dt2); 
    
    dset.Tables.Add(dt2); 
    
    var hashSet1 = new HashSet<string>(dset.Tables[0].Rows.Cast<ListItem>().Select(x => x.Value)); 
    var hashSet2 = new HashSet<string>(dset.Tables[1].Rows.Cast<ListItem>().Select(x => x.Value)); 
    
    var result = hashSet1.SetEquals(hashSet2); 
    if (result == true) 
    { 
    found = 1; 
    } 
    

    我得到一個出錯數據集不能被強制轉換爲列表項。請幫助。

    +0

    它是否需要投入ListItem的行?你可以這樣寫:'dset.Tables [0] .Rows.Select(x => x [「ColumnName」]。value)' – opewix

    +0

    我試過說DataSet Row沒有任何Select方法。 –

    回答

    0

    定義一些列的名字,當你將它添加到HashSet的...

    System.Collections.Hashtable myHashtable1 = new System.Collections.Hashtable(); 
           myHashtable.Add(dset.Tables[0].Rows[0]["Column1"], myDataTable1.Rows[0]["Column2"]); 
           myHashtable.Add(dset.Tables[0].Rows[1]["Column1"], myDataTable1.Rows[1]["Column2"]); 
    
    System.Collections.Hashtable myHashtable2 = new System.Collections.Hashtable(); 
           myHashtable.Add(dset.Tables[1].Rows[0]["Column1"], myDataTable1.Rows[0]["Column2"]); 
           myHashtable.Add(dset.Tables[1].Rows[1]["Column1"], myDataTable1.Rows[1]["Column2"]); 
    
    
    var result = myHashtable2 .SetEquals(myHashtable1); 
    if (result == true) 
    { 
    found = 1; 
    } 
    

    同樣...

    希望它可以幫助

    +0

    如何在此之後進行比較? –

    +0

    這是將其添加到散列表的方式,然後您可以使用var result = hashSet1.SetEquals(hashSet2);只有...我相信你有添加DataTable到HashTable的問題,而不是比較? –

    +0

    是的,但是在你給出的代碼中,我如何將datatable1分別設置爲hashSet1和datatable1以hashSet2。 –

    0

    使用IEnumerable如下比較兩個表.. 。

    IEnumerable<string> table1Value= dset.Tables[0].AsEnumerable().Select(x => (string)x[ColumnName]); 
    
    IEnumerable<string> table2Value= dset.Tables[1].AsEnumerable().Select(x => (string)x[ColumnName]); 
    
    IEnumerable<string> ChangedValue = table2Value.Except(table1Value); 
    

    如果ChangedValued爲空或空,則兩個表格es是一樣的

    +0

    不一樣,有一種情況table1Value包含table2Values的所有值,包括一些其他值。 –

    +0

    是的,我同意,那麼我們將不得不在兩種方式中編寫Except,並檢查兩個結果是否爲空或空 –

    相關問題