我正在尝试使用 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);
关于c# - LINQ:基于子列表中的属性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258093/