我有一个看起来像这样的课程
public class TestCase
{
public IEnumerable<string> Categories { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
但这很难看.有没有更好的方法来获得我想要的分组?
如果您使用以下LINQ查询:
var result = from testCase in testCases
from category in testCase.Categories
group testCase by category into g
select g;
Run Code Online (Sandbox Code Playgroud)
对于像这样的一组TestCase对象:
TestCase "X": Categories "A", "B", "C"
TestCase "Y": Categories "C", "B", "D"
Run Code Online (Sandbox Code Playgroud)
然后,您将获得每个不同类别的TestCase对象,如下所示:
Category "A": TestCases "X"
Category "B": TestCases "X", "Y"
Category "C": TestCases "X", "Y"
Category "D": TestCases "Y"
Run Code Online (Sandbox Code Playgroud)