2012-02-14 2 views
0

중첩 세트 모델을 사용 중이며 10 개의 상위 항목뿐만 아니라 각 상위 항목에 대해 10 개의 하위 항목을 선택할 수 있기를 원합니다.Linq는 각 상위 항목에 대해 하위 10 개를 선택합니다.

중첩 된 주석 시스템을 작성하려고합니다. 즉, 주석에 대한 응답은 '상위'주석 내에서 왼쪽 및 오른쪽 값을 갖는 것으로 표시됩니다.

큰 두꺼운 항목 목록 검색 시간을 줄이는 두통이 있습니다. 단일 Linq 문에서 위의 작업을 수행 할 수 있다면 반복 호출을 작성하는 것보다 많은 시간을 절약 할 수 있습니다. db는 각 부모에 대해 10 명의 자녀를 얻습니다.

datacontext에서 부모 (또는 루트 항목)를 가져 오는 데이 문을 사용합니다. 그들의 외부 좌우 값 다른 항목이없는

var query = context.Items 
        .Where(x => !context.Items.Any(y => y.LeftPos < x.LeftPos 
                && y.RightPos > x.RightPos)) 
        .OrderBy(x => x.Id) 
        .Take(pageSize) 
        .ToList(); 

상기 코드를 확인하여 중첩 세트 모델 최 (부모) 상품을 받고있다.

그래서 foreach (현재하고있는)로 parentItems를 반복하고 각 반복마다 db에 10 또는 (PageSize)를 호출하는 대신 Linq 성명서?

편집 :

중첩 세트 모델을 사용하고 있습니다. 내 항목의 위치는 왼쪽 및 오른쪽입니다 (leftPos 및 rightPos). 따라서 자식은 다른 객체의 왼쪽 및 오른쪽 값 내에 왼쪽 및 오른쪽 값이있는 객체이며, 다른 객체의 왼쪽 및 오른쪽 값은 차례대로 부모가됩니다. 내가 Linq를 사용하여 각 부모로부터 자녀의 X 양을 선택할 수있는 방법이 있나요 항목

1 a 4 
2 b 3 
5 c 10 
6 d 7 
8 e 9 
11 f 14 
12 g 13 

....

을 많이 가지고 그렇다면

1 a 4 
    2 b 3 

? 이 당신이 원하는 경우

는 어떤 도움을

+4

코드를 여러 줄에 넣으면 눈에 띄지 않습니다. –

+1

솔직히 말해서 많이. .. 지금 직접 편집 했으니 까 - 당신이 생각하는 것을 보아라. –

+1

자, 코드가 더 명확 해 졌으므로 모델에 대해 더 자세히 설명해 주시겠습니까? 부모/자녀 관계가 무엇인지는 분명하지 않습니다. –

답변

2
class Program 
    { 
     static void Main(string[] args) 
     { 
      List<A> lst = new List<A>(); 

      for (int j = 1; j < 4; j++) 
      { 
       var tmp = new A() { Value = j * 1000 }; 
       for (int i = 0; i < 150; i++) 
       { 
        tmp.SubItems.Add(new B { Value = i + 1, Parent = tmp }); 
       } 
       lst.Add(tmp); 
      } 

      List<B> result = lst.SelectMany(x => x.SubItems.Take(10)).ToList(); 
     } 
    } 

    public class A 
    { 
     public A() 
     { 
      SubItems = new List<B>(); 
     } 

     public int Value { get; set; } 
     public List<B> SubItems { get; set; } 
    } 


    public class B 
    { 
     public int Value { get; set; } 
     public A Parent { get; set; } 
    } 

확실하지 감사. 이렇게하면 하위 항목 모음을 얻을 수 있습니다. 각 부모의 하위 항목은 10 개입니다. 각 하위 항목의 .Parent 속성을 사용하여 부모에게 액세스 할 수 있습니다.

+1

나는 감회하지 않는다! 샘플 데이터를 만들기 위해 루프. lst.SelectMany (x => x.SubItems.Take (10))는 유일한 linq 호출입니다. – Jaster

관련 문제