C# 如何对这些XDocuments进行分组? 问题

C# 如何对这些XDocuments进行分组? 问题,c#,linq-to-xml,grouping,C#,Linq To Xml,Grouping,我有一组XDocument实例。每个文档都有一个可接受不同值的重复元素。我想按此值对它们进行分组,但每个元素可以指定不同的值 <sampledoc> <value>a</value> <value>b</value> <value>c</value> </sampledoc> GroupBy在这里对您没有任何帮助,因为它只将序列中的每个元素分配给一个组 var docs = new XD

我有一组
XDocument
实例。每个文档都有一个可接受不同值的重复元素。我想按此值对它们进行分组,但每个元素可以指定不同的值

<sampledoc>
  <value>a</value>
  <value>b</value>
  <value>c</value>
</sampledoc>

GroupBy
在这里对您没有任何帮助,因为它只将序列中的每个元素分配给一个组

var docs = new XDocument[] { docA, docB, docC } ;
var result = docs
   .SelectMany(doc => doc.Root.Elements("Value"))
   .Select(el => el.Value)
   .Distinct()
   .Select(key => new {
        Key = key,
        Documents = docs.Where(doc =>
            doc.Root.Elements("Value").Any(el => el.Value == key))
   });

谢谢我很快就意识到了GroupBy的存在,但我很挣扎。我刚刚提出了与您的查询的第一部分完全相同的问题,但是第二部分被证明是难以捉摸的,因为我试图让整个iGroup工作起来。也许我可以创建一个ILookup,您可以在其中进行Select调用。
var docs = new XDocument[] { docA, docB, docC } ;
var result = docs
   .SelectMany(doc => doc.Root.Elements("Value"))
   .Select(el => el.Value)
   .Distinct()
   .Select(key => new {
        Key = key,
        Documents = docs.Where(doc =>
            doc.Root.Elements("Value").Any(el => el.Value == key))
   });