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());