2012-03-03 4 views
0

다음을 수행하는 메서드를 작성해야했습니다. CarSetSet에 Car 테이블이 한 개 있고 CaracterSet에 Primary 키 ID와 ColorId 열이 하나 더 포함되어 있다고 가정합니다. 그리고 "5,6,7,8"(임의의 길이)와 같이 쉼표로 구분 된 ID가있는 문자열이 있습니다. 작업은 해당 CarID에 대해 모든 적절한 ColorIds가 동일한 지 확인하는 것입니다.데이터 집합에서 데이터 비교

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; 

즉, 주어진 Id를 가진 모든 차량이 단색인지 확인하십시오. 이제는 더 이상 코드가 없지만 3 개의 foreach 루프와 3 개의 linq 표현식을 사용하여 작성했습니다. 이 작업을 수행하는 간단한 방법이 있습니까? 당신이 원하는 경우

답변

1

모든 차량은 같은 색 그들 모두는 처음과 동일한 색상을해야 의미가 있습니다

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

편집 : 또는 당신은 어떤 자동차가없는 경우 예외를 throw 아무 문제가없는 경우 주어진 ID를 사용하면 람다 구문이 쿼리를 사용할 수 있습니다

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

당신은 카운트를 별개을 수행하고 주장하여이 작업을 수행 할 수있다 1.

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

문자열 자체에 포함 된 메서드가 있으므로 다른 배열을 만들 필요가 없습니다. –