2011-08-17 15 views
3

我有一個類,看起來像這樣如何通過集團在IEnumerable的值屬性

public class TestCase 
{ 
    public IEnumerable<string> Categories { get; private set; } 
} 

我的TestCase對象的列表,我希望能夠按類別,例如,如果TestCase在類別中具有值「a」和「b」,該測試用例的實例將在「a」分組和「b」分組中。我對Linq的GroupBy的理解讓我相信它會使用IEnumerable的Equals方法,並且如果按類別分組,我會針對每個測試用例獲得完全不同的組。

我有一個蠻力解決方案,實現了分組我想

var categoryGroups = new Dictionary<string, List<TestCase>>(); 

foreach (var testCase in testPackage.TestCase) 
{ 
    foreach (var category in testCase.Categories) 
    { 
     if (!categoryGroups.ContainsKey(category)) 
     { 
      categoryGroups.Add(category, new List<TestCase>()); 
     } 

     categoryGroups[category].Add(testCase); 
    } 
} 

但是這是醜陋的。有沒有更好的方法來獲得我想要的分組?

+3

爲什麼不使用按功能分組LINQ? – hungryMind

回答

5

如果您使用以下LINQ查詢:

var result = from testCase in testCases 
      from category in testCase.Categories 
      group testCase by category into g 
      select g; 

一組的TestCase的對象這樣的:

TestCase "X": Categories "A", "B", "C" 
TestCase "Y": Categories "C", "B", "D" 

那麼你得到的每一個不同類別的TestCase的對象如下:

Category "A": TestCases "X" 
Category "B": TestCases "X", "Y" 
Category "C": TestCases "X", "Y" 
Category "D": TestCases "Y" 
3
public class TestPackage 
{ 
    public List<TestCase> testCase = new List<TestCase>(); 
} 

public class TestCase 
{ 
    public IEnumerable<string> Categories { get; private set; } 
} 

TestPackage testpackage = new TestPackage(); 
var result = testpackage.testCase.GroupBy(rs => rs.Categories);