使用LINQ

时间:2019-03-03 07:30:54

标签: c# linq

例如:

var a = new { Key = new[] {1, 2} ... };
var b = new { Key = new[] {2, 3} ... };
var c = new { Key = new[] {3} ... };

我想要LINQ查询,它将在new [] {a, b, c}.GroupByWithArray(x => x.Key)

之后得到下面的结果
Key 1: a
Key 2: a, b
Key 3: b, c

2 个答案:

答案 0 :(得分:0)

var a = new { Key = new[] { 1, 2 }};
var b = new { Key = new[] { 2, 3 }};
var c = new { Key = new[] { 3 }};

var result =
    new[] { a, b, c }.SelectMany(item => item.Key.Select(key => (Item: item, Key: key)))
                     .GroupBy(pair => pair.Key)
                     .ToDictionary(group => group.Key,
                                   group => group.Select(pair => pair.Item).ToArray());

var expected = new Dictionary<int, object[]>
{
    { 1,  new[] { a }},
    { 2,  new[] { a, b }},
    { 3,  new[] { b, c }}
};

result.Should().BeEquivalentTo(expected); // Pass Ok

答案 1 :(得分:0)

这似乎是您想要的最合乎逻辑的:

var a = new { Key = new[] { 1, 2 } };
var b = new { Key = new[] { 2, 3 } };
var c = new { Key = new[] { 3 } };

var values = new[] { 'a', 'b', 'c' };

var result =
    new[] { a, b, c }
        .Zip(values, (keys, value) => new { keys, value })
        .SelectMany(x => x.keys.Key, (x, key) => new { key, x.value })
        .GroupBy(x => x.key, x => x.value);

var output =
    String.Join(
        Environment.NewLine,
        result.Select(r => $"Key {r.Key}: {String.Join(", ", r)}"));

给出:

Key 1: a
Key 2: a, b
Key 3: b, c

现在,我不知道您的问题中的...是什么意思,但是如果我只是假设您的意思是列表可以更长,那么它什么都不会改变。