C# LINQ合并两个分组的查询结果
在我的域中,我有一个名为“Block”的对象。“块”可以附加“管脚”和“属性” 我可以创建两个组,它们给出以下结果: 第一组是: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: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()需要强类型返回值,但我不知道如何实现。如何使用强类型返回值?