C# 从分组Linq查询生成字符串

C# 从分组Linq查询生成字符串,c#,linq,string,C#,Linq,String,给定以下代码: var people = new List<person>(){ new person { Name = "John", FamilyName = "Pendray" }, new person { FamilyName = "Emery", Name = "Jake"}, new person { FamilyName = "Pendray", Name = "Richard" } }; var q = from

给定以下代码:

var people = new List<person>(){ new person { Name = "John", FamilyName = "Pendray" },
             new person { FamilyName = "Emery", Name = "Jake"},
             new person { FamilyName = "Pendray", Name = "Richard" } };

var q = from p in people
                 orderby p.Name
                 group p by p.FamilyName into fam
                 orderby fam.Key
                 select new { fam.Key, members = from p in fam select p };
var people=new List(){new person{Name=“John”,FamilyName=“Pendray”},
新人{FamilyName=“Emery”,Name=“Jake”},
新人{FamilyName=“Pendray”,Name=“Richard”};
var q=人的p值
orderby p.Name
p组由p.FamilyName改为fam
按家庭钥匙订购
在fam select p}中选择new{fam.Key,members=from p;
是否可以将最后一行替换为将输出包含以下两个字符串的IEnumerable
的select:
“彭德雷·约翰·理查德”
“金刚砂杰克”?可以这样将linq查询投影到字符串中吗

编辑:我知道这可以通过进一步的代码实现,但我感兴趣的是,这是否可以从linq查询本身中实现,就像VB能够从查询中投影xml一样(特别是本页上的最后一个代码块)

一样

您必须更改“选择零件”。最简单的方法是定义一个函数,该函数接受IEnumerable并生成该字符串,然后调用该函数

people = new List<person>(){ new person { Name = "John", FamilyName = "Pendray" },
         new person { FamilyName = "Emery", Name = "Jake"},
         new person { FamilyName = "Pendray", Name = "Richard" } };

var q = from p in people
        orderby p.Name
        group p by p.FamilyName into fam
        orderby fam.Key
        select new { Key = fam.Key, Text = GetText(fam) };



// and elsewhere...
private string GetText(IEnumerable<person> family) {
    string result = "Whatever"; // build the result string here
    return result;
}
返回

金刚砂杰克

Pendray John Richard

        select GetText(fam);
var q = from p in people
        orderby p.Name
        group p by p.FamilyName into fam
        orderby fam.Key
        select fam.Key + " " + string.Join(" ", (from fm in fam select fm.Name).ToArray());