2009-01-06 69 views
2

考虑下面的代码生成字符串:从分组LINQ查询

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 }; 

是否有可能有一个选择替换最后一个行会输出一个IEnumerable的<string>包含这两个字符串: “Pendray约翰·理查德“ ”金刚砂杰克“?是否有可能将linq查询投影到这样的字符串中?

编辑:我知道这是可能的进一步的代码,但我感兴趣的是,这是否可以在linq查询本身内以类似的方式完成VB能够投影xml出查询如在http://www.thinqlinq.com/default/Projecting-XML-from-LINQ-to-SQL.aspx(特别是本页最后的代码块)

回答

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

返回

Emery Jake
Pendray John Richard

0

当然。

你将不得不改变选择部分。最简单的方法是定义将采取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; 
} 

另外,如果你只想要的文字,你可以更改查询的最后一行简单

 select GetText(fam);