2010-05-10 8 views
0

단순히 내 쿼리의 반환 된 결과에 대해 행 번호를 포함하고 싶습니다. LINQ 표시 행 번호

는 내가 달성하기 위해 노력하고 무엇을 설명하지만, 나에게

http://vaultofthoughts.net/LINQRowNumberColumn.aspx

가 MS SQL I에서

"식 트리 할당 연산자를 포함 할 수 없습니다"예외를 제공하는 다음과 같은 게시물을 발견 ROWNUMBER() 함수를 사용하기 만하면 LINQ에서 해당 함수를 찾고 있습니다.

+0

사용자 고유의 LINQ 쿼리를 사용할 수 있습니까? – Jonathan

답변

2

사용 AsEnumerable()이 클라이언트에서 쿼리의 마지막 부분을 평가하기 위해, 그 마지막 부분에서 카운터 열 추가

int rowNo = 0; 
var results = (from data in db.Data 
       // Add any processing to be performed server side 
       select data) 
       .AsEnumerable() 
       .Select(d => new { Data = d, Count = ++rowNo }); 
0

LINQ to SQL을 사용하면 SQL 함수를 매핑 할 수 있습니다.

public partial class YourDataContext : DatContext 
{ 
    [Function(Name = "ROWNUMBER")] 
    public int RowNumber() 
    { 
     throw InvalidOperationException("Not called directly."); 
    } 
} 

을 그리고 다음과 같이 쿼리를 작성 : :이 테스트하지했습니다 동안, 나는이 구조가 작동합니다 생각

from author in db.Authors 
select new { Lp = db.RowNumber(), Name = author.Name }; 
2

내가 SQL에 LINQ가 지원 여부를 모르겠어요를 (하지만 propably 것입니다)하지만,에 overload있다 Queryable.Select 인덱서를 사용하여 람다를 허용하는 메서드입니다.

내가 몇 가지 테스트를 실행하지만, SQL 불행히도 LINQ는이 오버로드 (3.5sp1 및 4.0 모두)를 지원하지 않습니다 :

db.Authors.Select((author, index) => new 
{ 
    Lp = index, Name = author.Name 
}); 

UPDATE를 다음과 같이 쿼리를 작성할 수 있습니다. 이 메시지와 함께 NotSupportedException를 던졌습니다 :

지원되지 않는 과부하가 '선택'쿼리 연산자에 사용됩니다.

+1

-1 : 위임자에게 색인을 전달하는 'Queryable.Select'가 없습니다. – Richard

+1

@ 리차드 : 당신도 이것을 확인하는 것을 괴롭 혔습니까? 여기에 대해 제가 이야기 한 오버로드가 있습니다 : http://msdn.microsoft.com/en-us/library/bb534638.aspx. 귀하의 부정 투표를 재평가하십시오. – Steven

+0

나는 확인을 보았습니다. (하지만 지금은 어디에서 찾을 수 없습니다.) ORM은 일반적으로 그것을 구현하지 않습니다. http://stackoverflow.com/questions/1873850/which-orm-tools-support-this-version-of-queryable-select-extension-method/1905527 – Richard