5

与えられた例を並べ替える方法。

        IEnumerable<extra> eList = new List<extra>()
        {
            new extra{ id = 1, text = "a"},
            new extra{ id = 2, text = "g"},
            new extra{ id = 3, text = "i"},
            new extra{ id = 4, text = "e"},
            new extra{ id = 5, text = "f"},
            new extra{ id = 6, text = "d"},
            new extra{ id = 7, text = "c"},
            new extra{ id = 8, text = "h"},
            new extra{ id = 9, text = "b"}
        };

        IEnumerable<sample> sam = new List<sample>()
        {
            new sample{ id = 1, name = "sample 1", list = new List<int>{1,5,6}},
            new sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
            new sample{ id = 3, name = "sample 1", list = new List<int>{8,3,7}},
            new sample{ id = 4, name = "sample 1", list = new List<int>{3,4,8}},
            new sample{ id = 5, name = "sample 1", list = new List<int>{1,5,7}},
            new sample{ id = 6, name = "sample 1", list = new List<int>{6,9,7}}
        };

サンプルリストを並べ替えて、上記の追加のオブジェクトに結合するこのコードがあります。

           var s2 = (from d1 in sam
                  select new
                  {
                      name = d1.name,
                      id = d1.id,
                      list =
                      (
                         from d2 in d1.list
                         join e in eList on d2 equals e.id
                         select new {  
                             id = d2, text = e.text
                         }
                      ).OrderBy(item => item.text.FirstOrDefault())
                  });

上記のコードは正常に動作し、2 つのデータを結合し、リストの値を並べ替えました。しかし、私が望むのは、「s2」の上の出力が「list.text」による「リスト」値で再度ソートされることです。

したがって、上記の可能な出力は次のようになります。

        { id = 1, name = "sample 1", list = {'a','f','d'}},         
        { id = 5, name = "sample 1", list = {'a','f','c'}},
        { id = 2, name = "sample 1", list = {'g','b'}},
        { id = 4, name = "sample 1", list = {'i','e','h'}},
        { id = 6, name = "sample 1", list = {'d','b','c'}},
        { id = 3, name = "sample 1", list = {'h','i','c'}},

これはLINQで可能ですか?

ありがとう

4

1 に答える 1

4
var newsam = sam.Select(s => new
                 {
                   id = s.id,
                   name = s.name,
                   list = s.list
                           .Select(l => eList.FirstOrDefault(e => e.id == l).text)
                           .OrderBy(e => e)
                           .ToList()
                 }
                ).OrderBy(s => s.list.FirstOrDefault())
                 .ToList();

編集

したがって、内部リストはeListのテキスト値でソートされます。外側のリストは、内側のリストの最初の要素でソートされます

編集

          var s2=(from d1 in sam
                  select new
                  {
                      name = d1.name,
                      id = d1.id,
                      list =
                      (
                         from d2 in d1.list
                         join e in eList on d2 equals e.id
                         select e.text
                      ).OrderBy(item => item).ToList()
                  }).OrderBy(item => item.list.FirstOrDefault());
于 2012-09-03T03:53:02.040 に答える