Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 272
  • Last Modified:

Easy Boolean algebra problem

I'm having a very dumb issue with my Boolean algebra and I can't find the error. I'm hoping someone can help me. Here's my code -- it's largely trace output for debugging:

(Just for context, it's in the middle of a for loop. The row object is of type DataRow.)

Trace.Write("Current row: " + row["user_id"] + ", " + row["file_id"]);

Trace.Write("row[\"can_upload\", DataRowVersion.Original] = " +
(row.HasVersion(DataRowVersion.Original) ? row["can_upload", DataRowVersion.Original] : "DataRowVersion.Original does not exist."));

Trace.Write("row[\"can_download\", DataRowVersion.Original] = " +
(row.HasVersion(DataRowVersion.Original ) ? row["can_download", DataRowVersion.Original] : "DataRowVersion.Original does not exist."));

Trace.Write("row[\"can_upload\", DataRowVersion.Current ] = " +
(row.HasVersion(DataRowVersion.Current) ? row["can_upload", DataRowVersion.Current] : " DataRowVersion.Current does not exist."));

Trace.Write("row[\"can_download\", DataRowVersion.Current] = " +
(row.HasVersion(DataRowVersion.Current) ? row["can_download", DataRowVersion.Current] : "DataRowVersion.Current does not exist."));

if(row.HasVersion(DataRowVersion.Original)) {
     Trace.Write("Upload, original equals current? " + (row["can_upload", DataRowVersion.Original] == row["can_upload", DataRowVersion.Current]).ToString());
     Trace.Write("Download, original equals current? " + (row["can_download", DataRowVersion.Original] == row["can_download", DataRowVersion.Current]).ToString());
}

if( row.HasVersion(DataRowVersion.Original) &&
     ((row["can_upload", DataRowVersion.Original] == row["can_upload", DataRowVersion.Current]) &&
      (row["can_download", DataRowVersion.Original] == row["can_download", DataRowVersion.Current])) )
{
     Trace.Write("No change for user: " + (int)row["user_id"]);
     continue;
}
Trace.Write("Permissions changed for user: " + (int)row["user_id"]);

Here's the output:
Current row: 1437, 2078      
row["can_upload", DataRowVersion.Original] = True  
row["can_download", DataRowVersion.Original ] = True  
row["can_upload", DataRowVersion.Current] = True  
row["can_download", DataRowVersion.Current] = True  
Upload, original equals current? False  
Download, original equals current? False  
Permissions changed for user: 1437

So, row["can_upload", DataRowVersion.Original] is true, row["can_upload", DataRowVersion.Current] is true, but they don't have the same boolean value? Can someone help me out here please?
0
tjgquicken
Asked:
tjgquicken
  • 2
1 Solution
 
jkmyoungCommented:
Instead of using ==, I suggest using or, ||
0
 
jkmyoungCommented:
err sorry, brain fart. Ignore last comment.

You might have to cast your values as booleans, eg:

((bool)(row["can_upload", DataRowVersion.Original]) == (bool)(row["can_upload", DataRowVersion.Current]) )

Are you using C or something else?
0
 
_TAD_Commented:
>>Instead of using ==, I suggest using or, ||

??

==  --> Is Equal To
||  -->  OR

I don't follow the logic for that.




As for the problem itself, I would reccomend getting the actual values for DataRowVersion.Original and DataRowVersion.Current.  Then I would check to see if your row contains those versions.  

Keep in mind that some of the object used in .Net are very intelligent and actually keep track of previous states.  I thought this type of intelligence was limited to a dataset, but then a dataset is only a collection of datatables, which in turn is only a collection of datarows.  It is possible that the datarow tracks its previous state and may very well contain two different versions.
0
 
tjgquickenAuthor Commented:
I tried casting the two values to bools, and that worked. Now that I think about it, using Object.Equals() would probably also work.
0

Featured Post

Industry Leaders: 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
Tackle projects and never again get stuck behind a technical roadblock.
Join Now