• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 870
  • Last Modified:

How can I compare columns in a dataset for equal and not equal values?

hi all, i have a dataset that contains 4 columns, employee key, employee name, manager key, manager name.  i need to be able to list a set of rows of discrepancies where emp key = mgr key and names are different, or if emp name = mgr name, list the keys that are different.

so if employee key = 123 and employee name for key 123 is kelly, and manager key = 123 and manager name for mgr key 123 is matt, then i need to list that as a row, since the names don't match the equal keys.

i have a loop (below) going through the dataset looking for the discrepancies, but it's proving too slow on larger datasets where there is 50,000 + rows.  What I need is help with possibly setting up a relationship or filtered view to the dataset to accomplish the same thing.  Performance is really what i'm looking for here.

Thanks in advanced!

DataTable _dt = _ds.Tables[0];

for (int i = 0; i < _dt.Rows.Count; i++)
{
    for (int j = 0; j < _dt.Rows.Count; j++)
    {
       if ((_dt.Rows[i][_employeeKey].ToString() == _dt.Rows[j][_managerKey].ToString() &&
         _dt.Rows[i][_employeeName].ToString() != _dt.Rows[j][_managerName].ToString()) ||

         _dt.Rows[i][_employeeName].ToString() == _dt.Rows[j][_managerName].ToString() &&
         _dt.Rows[i][_employeeKey].ToString() != _dt.Rows[j][_managerKey].ToString() )
        {
        //add row
        }

0
kellyclu
Asked:
kellyclu
  • 2
  • 2
1 Solution
 
anoyesCommented:
You might have better luck offloading that to your DB server.  MS SQL?  You could create a view or stored proc that would take care of finding your discrepancies, and then the ASP only has to list what comes out of that.  Is this a viable option?  If you can give a little info on how your DB is set up I can give you the SQL to do it.
0
 
kellycluAuthor Commented:
not an option, the dataset is generated from the user choosing a file with several columns in it.  they then select which columns they want to be the emp key/name, and mgr key/name.  so the columns are coming from 4 drop downs on a web page listing all the available columns in the file.

so the user is looking for file discrepancies between values they choose, i was trying to make the question easier by not going there.

tried:
string _filter = _employeeKey + " = " + _managerKey + " AND " + _employeeName + " <> " + _managerName;
DataRow[] _rows = _dt.Select(_filter);

no rows are returned because it's all in one table. i've been thinking about creating a relation between to dataviews, but haven't been able to make it work.
0
 
anoyesCommented:
Here's a tutorial about DataViews - don't know if it'll help any: http://aspnet.4guysfromrolla.com/articles/040203-1.2.aspx

But what about trying:
Dim dv As DataView = _ds.Tables(0).DefaultView
dv.RowFilter = "_employeeKey = _managerKey AND _employeeName <> _managerName"

This would only give you one set of discrepancies, but if this works you could easily do another one for the other set.
0
 
kellycluAuthor Commented:
the dataview provided has the same problem as my filter string posted right before your's.

the rows in the dataset are like this:

empkey  empname  mgrkey  mgrname

so what we're both doing is going through the dataset one row at a time looking for equal keys, different names.  

if data was
123 matt 234 kelly
234 linda 123 matt

you won't find any discrepancies because 123 is not = to 234, and 234 is not = 123, the check is going through the dataset one row at a time.

i need to go through the data set so the 123 for the emp key is compared to the 123 of the mgr key.  so instead of comparing each individual row, i need to take the emp key 123 for matt, and look for the 123 mgr key (next line), then mark THAT as a discrepancy because the 234 name (linda) is not the same as the previous 234 (kelly).

0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now