2012-10-19 41 views
0

在我的項目中有兩個數據集dsNamesdsDetails將數據集劃分爲匹配和不匹配的數據表

我不知道SQL。在這裏我連接到XML和文本文件。

dtNames

EmployeeName EmployeeRole 

    a    2 
    b    3 
    c    4 

dtDetails

Empid  EmployeeName EmpCity EmployeeRole 

    101  a    abc   3 //EmpRole not equal to above table EmpRole 
    102  b    abc   3 
    103  c    xyz   4 
    104  d    pqr   5 
    105  e    rst   6 

我想涉及基於這兩個數據集的EmployeeNameEmployeeRole(這裏比較dsNames),結果存儲在另一個數據集dsMain(來自dsDetails的表格),然後將這兩個數據集分成比較如matchedDataTableunmatchedDataTable。我不知道(我是.net的初學者)。我知道這可以使用DataRelationRowFilter完成,但我不能想到如何做到這一點,因爲有兩列要與其他數據表兩列,我不知道。

我嘗試下面的代碼:(不工作

  foreach (DataRow rwMain in dsNames.Tables[0].Rows) 
      { 
       foreach (DataRow rwSub in dsDetails.Tables[0].Rows) 
       { 
        if (rwMain["EmployeeName"].Equals(rwSub["EmployeeName"])) 
        { 
         if (rwMain["EmployeeRole"].Equals(rwSub["EmployeeRole"])) 
         { 
          // Matched DataTable 
         } 
         else 
         { 
          //Unmatched DataTable 
         } 
        } 
       } 
      } 

我做錯了什麼在上面的代碼,也它看起來我我沒有做它在一個正確的方式。

請不要linq,因爲我知道但我不能在我的項目中使用它。

請協助。

+0

你可以使用LINQ解決它? –

+0

我知道linq,但我的項目是嚴格的非LINQ –

+0

有一些方法,如rowfilter,選擇,datarelation在數據集中。但我對他們是陌生的。所以我不能理解如何關聯和顯示兩個數據關係。 –

回答

0

我用Select物業

DataRow[] matchedRows = dtNames.Select("EmployeeName = '" + dsDetails.Tables[0].Columns[0].ToString() + "'" 
        + " AND " + " EmployeeRole ='" + dsDetails.Tables[0].Columns[1].ToString() + "'"); 
       // 
DataRow[] mismatchedRows = dsDetails.Tables[0].Select("EmployeeName <> '" + dtNames.Columns[0].ToString() + "'" 
        + " OR" + " EmployeeRole <>'" + dtNames.Columns[1].ToString() + "'"); 
1

你可以使用LINQ,你只需要加入兩個表。一次只有EmpName,並且兩列都一次。

var sameRoleNames = from rn in dtNames.AsEnumerable() 
       join rd in dtDetails.AsEnumerable() 
       on new 
       { 
        Name = rn.Field<string>("EmpName"), 
        Role = rn.Field<string>("EmpRole"), 
       } equals new 
       { 
        Name = rd.Field<string>("EmpName"), 
        Role = rd.Field<string>("EmpRole"), 
       } 
       select rd; 
var notSameRoleNames = from rn in dtNames.AsEnumerable() 
        join rd in dtDetails.AsEnumerable() 
        on rn.Field<string>("EmpName") equals rd.Field<string>("EmpName") 
        where rn.Field<string>("EmpRole") != rd.Field<string>("EmpRole") 
        select rd; 
var matchedDataTable = sameRoleNames.CopyToDataTable(); 
var unmatchedDataTable = notSameRoleNames.CopyToDataTable(); 

我剛剛在「你能用Linq」的問題上看到你的答案。無論如何,我都會留下它,也許這對其他人有幫助。