c# – LINQ:根据子列表中的属性进行分组

我试图使用LINQ来创建基于元数据的文档的分组列表,该元数据是文档的列表.

下面是我的对象结构如何:

List<Document>
         --> List<Metadata>
                      --> Metadata has a name and a value property.

我想根据一个名称为ID的元数据标签对文档进行分组,并将其分组,其中ID属性的值相同.

我试过这样:

var x = response.Document
         .GroupBy(d => d.Metadata.Where(dc => dc.Name == DocProperty.ID)
         .Select(dc => dc.Value));

这将导致单个文档的列表,但不会分组在ID上.

还考虑选择不同的ID列表,然后循环遍历文档列表,并找到与ID相匹配的文档.那个似乎很多开销,因为对于每个ID在不同列表中,我必须每次进入元数据列表并找到文档,并需要额外检查找到的多个项目,获取我需要的属性等.

任何人都有一个好主意,如何让这个事情工作?

解决方法

var x = from doc in source
        from Meta in doc.Metadata
        where Meta.Name == DocProperty.Id
        group doc by Meta.Value;

或(评论)流利的符号:

var y = source
    .SelectMany(doc => doc.Metadata,(doc,Meta) => new { doc,Meta })
    .Where(pair => pair.Meta.Name == DocProperty.Id)
    .GroupBy(pair => pair.Meta.Value,pair => pair.doc);

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...