2011-11-04 2 views
2

나는이 ID를 사용하여 순서대로 이드 배열을 가지고 있는데, 그 다음에 linq 쿼리를 발행합니다. 그러나 배열의 ID가있는 순서와 동일한 순서로 다시 돌아 오기를 원합니다.배열을 사용하여 linq 결과를 어떻게 정렬 할 수 있습니까?

예 :

int[] ids = new [] {10, 9, 8, 7}; 

var query = from row in context.Table where ids.Contains(row.Id) select row; 

어떻게 획득 항목이 배열에서와 같은 순서에 있는지 확인 수 있을까?

답변

5

당신은 인덱스 행을 주문할 수의 자신의 Idids에서 :

var query = from row in context.Table 
      where ids.Contains(row.Id) 
      orderby Array.IndexOf(ids, row.Id) 
      select row; 

잘 모르겠어요 경우 LINQ - 투 - SQL 제공 이것을 지원합니다; 당신은 LINQ - 투 - 객체를 사용하여 순서를 수행해야 할 수도 있습니다 :

var query = from row in context.Table 
      where ids.Contains(row.Id) 
      select row; 

var orderedQuery = from row in query.AsEnumerable() 
        orderby Array.IndexOf(ids, row.Id) 
        select row; 

또는

var orderedQuery = context.Table 
          .Where(row => ids.Contains(row.Id)) 
          .AsEnumerable() 
          .OrderBy(row => Array.IndexOf(ids, row.Id)); 
+0

왜 ID에서 선택하지 않고 테이블에서 적절한 행을 검색합니까? 내가 질문의 일부 지점을 놓칠 수 있습니다 ... – sll

+0

완벽한 답변 감사합니다. – Mantorok

+0

@sll : 여러 행을 선택하는 쿼리 하나가 각각 하나의 행을 선택하는 여러 쿼리보다 더 효율적일 수 있습니다. – dtb

0

당신은 IDS에서 열거하고 해당 테이블 항목을 검색 할 수 있습니다

// if table contains multiple rows per id 
var resultSet = ids.SelectMany(id => context.Table.Where(tbl => tbl == id)); 

// if table contains one row per id 
var resultSet = ids.Select(id => context.Table.Where(tbl => tbl == id).Single()); 
관련 문제