2013-10-24 3 views
0

저는 Windows 8 스토어 응용 프로그램을 보유하고 있으며 데이터베이스에 SQLite의 최신 버전을 사용하고 있습니다.SQLite for Windows 스토어 앱의 LINQ에 여러 열로 주문할 'ThenBy'가 없습니다.

그래서 데이터베이스에서 일부 레코드를 반환하고 더 많은 한 열을 주문하고 싶습니다. 그러나 SQLite는 ThenBy 문을 가지고 있지 않습니다? 그래서 내 LINQ 문은 다음과 같습니다 :

from i in connection.Table<MyTable>() 
where i.Type == type 
orderby i.Usage_Counter 
// ThenBy i.ID 
select i); 

그래서 어떻게 SQLite는 여러 열을 기준으로 정렬 할 또 다른 LINQ 문을 수행하지 않고? 쿼리 구문을 사용하는 경우

답변

2

ThenBy이 구현되어 있지 않으므로 SQL-Net의 LINQ 구현을 사용하여 여러 열을 기준으로 정렬하지 마십시오.

당신은 connectionQuery 방법을 사용하여이 문제를 해결할 수 있습니다

var sorted = 
    connection.Query<MyTable>(
    "select * from MyTable where Type = ? order by Usage_Counter, ID", 
    // you may have to cast to int here... 
    type); 

또 다른 옵션은 위에서 당신의 결과를 사용하고에 ToList()를 호출하는 것입니다. 결과를 여러 값으로 정렬 할 수 있습니다.

var tables = 
from i in connection.Table<MyTable>() 
where i.Type == type 
select i; 

var tmp = tables.ToList(); 

var sorted = 
from i in tmp 
orderby i.Usage_Counter, i.ID 
select i; 
+0

고마워. 첫 번째 예를 사용했는데 정상적으로 작동합니다. 시간 내 줘서 고마워 – Sun

0

, 당신은 단순히 정렬 기준 필드의 쉼표로 구분 된 목록을 제공 : 메서드 구문으로

from i in connection.Table<MyTable>() 
where i.Type == type 
orderby i.Usage_Counter, i.ID 
select i 

, 당신은 ThenBy를 사용할 수 있습니다

connection.Table<MyTable>() 
      .Where(i => i.Type == type) 
      .OrderBy(i => i.Usage_Counter) 
      .ThenBy(i => i.ID) 

편집 - 유감스럽게 여기지만, Windows 8 Store 응용 프로그램에서 Entity Framework를 사용할 수없는 것으로 보입니다. Is EntityFramework available for Windows 8 Store Apps?

+0

작동하지 않습니다. 쉼표로 구분 된 목록을 사용하려고하자마자 ThenBy를 찾을 수 없다는 오류 메시지가 나타납니다. SQLite로 시도해보십시오. – Sun

+0

* 정확한 * 오류 메시지 란 무엇입니까? 필요한 참조가 누락되었을 수 있습니다. 이 비슷한 질문을 참조하십시오 : http://stackoverflow.com/questions/5940548/orderby-not-found-error-in-linq-to-entities – Ocelot20

+0

전체 오류입니다 : 소스 유형에 대한 쿼리 패턴의 구현을 찾을 수 없습니다 'SQLite.TableQuery '. '그럼'이 없습니다. 'System.Linq'에 대한 참조 또는 using 지시문이 누락 되었습니까? 게시 한 질문과 매우 유사하지만 Windows 8 저장소 응용 프로그램이므로 System.Data.Entity 네임 스페이스를 참조 할 수 없으며 이미 System.Linq를 참조했습니다. – Sun