我有一个看起来像这样的课程
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);
}
}
但这很难看。有没有更好的方法来获得我想要的分组?
答案 0 :(得分: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"
答案 1 :(得分: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);