2017-05-23 7 views
0

トピックのリストがあり、そのトピックをアルファベット順のグループの範囲内に表示する必要があります。アルファベット順のグループにクエリを書き込む方法

public class Topic 
      { 
       public string Title { get; set; } 
      } 
    List<Topic> topics = new List<Topic>(); 
       topics.Add(new Topic() { Title = "Egg" }); 
       topics.Add(new Topic() { Title = "Blue" }); 
       topics.Add(new Topic() { Title = "Adeno" }); 
       topics.Add(new Topic() { Title = "Elephant" }); 
       topics.Add(new Topic() { Title = "Air" }); 
       topics.Add(new Topic() { Title = "Fun" }); 
       topics.Add(new Topic() { Title = "Fish" }); 
       topics.Add(new Topic() { Title = "Care" }); 
       topics.Add(new Topic() { Title = "Deer" }); 
       topics.Add(new Topic() { Title = "African" }); 
       topics.Add(new Topic() { Title = "Cook" }); 
       topics.Add(new Topic() { Title = "Flow" }); 

私は、次の試してみましたが、これは、個々のアルファベットのA-Zのために返されます。

var sortedGroups = 
    from topic in topics 
    orderby topic.Title 
    group topic by topic.Last[0] into newGroup 
    orderby newGroup.Key 
    select newGroup; 
foreach (var tGroup in sortedGroups) 
{ 
    Console.WriteLine(tGroup.Key); 
    foreach (var t in tGroup) 
    { 
     Console.WriteLine("{0}", t.Title); 
    } 
} 

所望の出力が見えます

  • ABC
    • アデノ
    • アフリカ
    • エア
    • ブルー
    • クック
    • のような
    • ケアDEF
    • 鹿
    • 楽しい
    • フロー
  • GHI
  • JKL
+0

これまでに何を試みましたか? –

答えて

1

[OK]を、

var q = from t in topics 
      orderby t.Title 
      group t by (((int)t.Title[0])+1) /3; 
  • (int)t.Title[0]) .....私は、これは醜いですけど、それは動作します - 数への最初の文字をオンにします。 ( "A" = 65、 "B" = 66、...)
  • +1 - グループを右にする補正( "A" は今66で、 "B" = 67など)
  • /3 - 3を与えます連続する文字は同じ値(A、B、C now = 22)
+0

完璧な答え!やあ、ありがとう! – imdadhusen

関連する問題