2012-03-03 113 views
0

我必須編寫一個可以執行以下操作的方法: 有一個DataSet讓我們說CarDataSet帶有一個表Car,並且包含主鍵Id和一個更多列ColorId。還有一個字符串,用逗號分隔,例如「5,6,7,8」(隨機長度)。任務是檢查給定的汽車ID是否所有適當的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; 

換句話說 - 檢查所有具有給定Ids的汽車是否使用同一種顏色。現在我沒有我的代碼了,但是我使用了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); 

編輯:或者,如果你有拋出異常的時候沒有車,沒有問題給IDS可以使用兩種查詢在lambda語法:

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

字符串本身有Contains方法,不需要創建另一個數組。 – 2012-03-04 10:39:42