Сравнение данных в наборе данных - PullRequest
0 голосов
/ 04 марта 2012

Мне пришлось написать метод, который выполняет следующее: существует DataSet, скажем, CarDataSet с одной таблицей Car и содержит первичный ключ Id и еще один столбец ColorId.И есть строка с идентификаторами, разделенными запятыми, например, «5,6,7,8» (случайная длина).Задача состоит в том, чтобы проверить, идентичны ли все соответствующие цветовые идентификаторы для данных идентификаторов автомобилей.

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;

Другими словами - проверить, все ли автомобили с заданными идентификаторами одного цвета.Теперь у меня больше нет кода, но я сделал это, используя 3 цикла foreach и 3 выражения linq.Есть ли более простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Вы могли бы сделать это, выполнив отчетливое и установив счет 1. 1. 1001 *

 var colors = Cars.Where(x=>ids.Contains(x.ID.ToString())
                  .Select(x=>x.ColorID)
                  .Distinct().Count();
 return count == 1;
1 голос
/ 04 марта 2012

Если вы хотите, чтобы все автомобили имели одинаковый цвет, значит, все они должны быть того же цвета, что и первый:

// 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);

Редактировать: Или, если у вас нет проблем с выбрасыванием исключения, когда нет автомобиля с заданными идентификаторами, вы можете использовать два запроса в синтаксисе лямбды:

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