va.
va.

Reputation: 780

Data comparing in dataset

I had to write a method that does the following: There is a DataSet let's say CarDataSet with one table Car and contains Primary key Id and one more column ColorId. And there is a string with Ids seperated with commas for example "5,6,7,8" (random length). The task is to check if all appropriate ColorIds are identical for given Car Ids.

For example:
String ids = "5,6,7,8"
If all the Cars ColorIds are for example 3,3,3,3 where the Car Ids are 5,6,7,8 then return true;

In other words - check if all cars with given Ids are in one color. Now I don't have my code anymore but I made this using 3 foreach loops and 3 linq expressions. Is there any simplier way to do this?

Upvotes: 0

Views: 121

Answers (2)

Nix
Nix

Reputation: 58522

You could do this by performing a distinct, and asserting the count is 1.

 var colors = Cars.Where(x=>ids.Contains(x.ID.ToString())
                  .Select(x=>x.ColorID)
                  .Distinct().Count();
 return count == 1;

Upvotes: 1

Saeed Amiri
Saeed Amiri

Reputation: 22555

If you want all cars have same color means all of them should have same color as first one:

// first find the cars with given ids
var selectedCars = Cars.Where(x=>ids.Contains(x.ID.ToString());
// select one of them as comparer:
var firstCar = selectedCars.FirstOrDefault();
if (firstCar == null)
   return true;
// check all of them has same color as first one:
return selectedCars.All(x=>x.ColorID == firstCar.ColorID);

Edit: Or if you have no problem with throwing exception when there is no car with given ids you can use two query in lambda syntax:

var selectedCars = Cars.Where(x=>ids.Contains(x.ID.ToString()));
return selectedCars.All(x=>x.ColorID == selectedCars.First().ColorID);

Upvotes: 1

Related Questions