如何按IEnumerable属性中的值进行分组

use*_*384 4 c# linq

我有一个看起来像这样的课程

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)

但这很难看.有没有更好的方法来获得我想要的分组?

dtb*_*dtb 5

如果您使用以下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)