C# LINQ合并两个分组的查询结果

C# LINQ合并两个分组的查询结果,c#,linq,C#,Linq,在我的域中,我有一个名为“Block”的对象。“块”可以附加“管脚”和“属性” 我可以创建两个组,它们给出以下结果: 第一组是: Block:B1 Pin:P1 Pin:P2 Block:B2 Pin:P3 Pin:P4 第二组是: Block:B1 Attribute:Att1, Value: Value1 Attribute:Att2, Value: Value2 Block:B2 Attribute:Att3, Value: Val

在我的域中,我有一个名为“Block”的对象。“块”可以附加“管脚”和“属性”

我可以创建两个组,它们给出以下结果:

第一组是:

Block:B1
    Pin:P1
    Pin:P2
Block:B2
    Pin:P3
    Pin:P4
第二组是:

Block:B1
    Attribute:Att1, Value: Value1
    Attribute:Att2, Value: Value2
Block:B2
    Attribute:Att3, Value: Value3
    Attribute:Att4, Value: Value4
现在我想将这两个结果合并为如下内容:

var blockPinsQuery = from blockPinRelation in blockPinRelations
            join block in blocks
                on blockPinRelation.BlockId equals block.Id
            join pin in pins
                on blockPinRelation.PinId equals pin.Id
            group pin by block
            into g
            select new
                   {
                       Block = g.Key,
                       Pins = g
                   };
foreach (var group in blockPinsQuery)
        {
            Console.WriteLine("Block:" + group.Block.Name);
            group.Pins.ToList().ForEach(x => Console.WriteLine("\t" + "Pin:" + x.Name));
        }
结果组为:

Block:B1
    Pin:P1
    Pin:P2
    Attribute:Att1, Value: Value1
    Attribute:Att2, Value: Value2
Block:B2
    Pin:P3
    Pin:P4
    Attribute:Att3, Value: Value3
    Attribute:Att4, Value: Value4
林克有可能吗?或者,我是否需要取消分组的结果才能在以后创建分组的结果

谢谢

编辑: 使用Road242解决方案,我得到了以下结果:

Pin: P1
Pin: P2
Attribute: Att1
Attribute: Att2
Pin: P3
Pin: P4
Attribute: Att3
Attribute: Att4
管脚和属性看起来不错,但我丢失了作为分组键的块:-(

编辑: 我的查询如下所示:

var blockPinsQuery = from blockPinRelation in blockPinRelations
            join block in blocks
                on blockPinRelation.BlockId equals block.Id
            join pin in pins
                on blockPinRelation.PinId equals pin.Id
            group pin by block
            into g
            select new
                   {
                       Block = g.Key,
                       Pins = g
                   };
foreach (var group in blockPinsQuery)
        {
            Console.WriteLine("Block:" + group.Block.Name);
            group.Pins.ToList().ForEach(x => Console.WriteLine("\t" + "Pin:" + x.Name));
        }

正如您所看到的,在相关实体之间有一个关系表。但我想这并不重要

我的输出例程如下所示:

var blockPinsQuery = from blockPinRelation in blockPinRelations
            join block in blocks
                on blockPinRelation.BlockId equals block.Id
            join pin in pins
                on blockPinRelation.PinId equals pin.Id
            group pin by block
            into g
            select new
                   {
                       Block = g.Key,
                       Pins = g
                   };
foreach (var group in blockPinsQuery)
        {
            Console.WriteLine("Block:" + group.Block.Name);
            group.Pins.ToList().ForEach(x => Console.WriteLine("\t" + "Pin:" + x.Name));
        }

至于查询:

foreach (var group in joinedResults)
        {
            group.Pins.ToList().ForEach(p => Console.WriteLine("Pin: " + p.Name));
            group.Attributes.ToList().ForEach(p => Console.WriteLine("Attribute: " + p.Name));
        }

您可以使用linq join子句:


请您发布Block的声明,以便查看其属性等。谢谢使用强类型返回的Union,而不是anonymous。@AndréFigueiredo:我正试图使用Union()。正如您提到的Union()需要强类型返回值,但我不知道如何实现。如何使用强类型返回值?