2012-09-03 4 views
4

주어진 예제를 정렬하는 방법.LINQ에서 IEnumerable 정렬

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

위의 코드는 정상적으로 작동하며 두 데이터를 결합하고 목록의 값을 정렬했습니다. 하지만 내가 원하는 것은 's2'위의 출력이 'list.txt'에 의해 'list'값에 의해 다시 정렬된다는 것입니다.

그래서 가능한 출력은 이상이어야합니다

 { 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이 가능합니까?

감사

답변

2
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의 텍스트 값으로 분류되어 있습니다

; 외측리스트 내에서의 최초의 요소

EDIT으로 분류된다

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