2009-01-06 113 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);