2009-08-12 12 views
7

행의 ROW_NUMBER()를 찾는 방법 Linq to SQL은 페이징 (예 : Skip() 및 Take())을 사용할 때 ROW_NUMBER()을 사용합니다.Linq to SQL

그러나 실제로 쿼리에서 ROW_NUMBER() 값에 액세스하는 방법을 찾을 수 없습니다. 모든 레코드를 다시 가져 오지 않고 쿼리 내에서 레코드의 ROW_NUMBER()를 찾으십시오 ()..

나는이 성공을 T-SQL과 Linq에서 Object로했지만 LINQ to SQL 솔루션은 어렵다. 것 ROW_NUMBER()을 -

var rowTarget = 
    mainQuery 
     .Select((obj, index) => new { obj.ID, Index = index }) 
     .SingleOrDefault(x => x.ID == targetID); 

// rowTarget.Index is the answer 

그러나 Linq는 SQL에 대한 인덱스 매개 변수를 사용 Select()의 재 지정을 지원하지 않습니다 (그리고 정말 의미가 있습니다 :

객체에 Linq에에서

이 같은 행 번호를 얻을 수 있습니다 Skip() 및 Take()가 사용 된 경우에만 사용됩니다.

데이터베이스에서 모든 레코드가 반환되지 않는 솔루션을 찾을 수없는 것 같습니다.

이것도 가능합니까?

+0

http://stackoverflow.com/questions/1165028/how-do-i-add-rownumber-to-a-linq-query-or-entity 는 중복? –

+1

@bassfriend - EF와 LINQ-to-SQL은 이러한 작업에 대해 완전히 다른 지원을하고 있습니다 ... –

+0

나는 대답을보기를 희망합니다. 나는 색인 된 과부하가 L2S에서 작동하지 않는 동일한 문제에 직면 해있다. 나는 증분 ID로 행복 할 것이다; 여러 단계에서해야 할 것 같네요. –

답변

2

:; 왜 당신이 여기 SelectMany를 사용하는

(편집을 시도 여전히 "Unsupported overload used for query operator 'Select'"제공)? 색인을 포함하는 Select 버전을 사용해 보셨습니까?

.Select((obj, index) => new { obj.ID, Index = index }) 
    .SingleOrDefault(x => x.ID == targetID); 

은 또한 아마 포함해야 OrderBy 명시 적 - SQL은 LINQ - 투 - 당신이 대부분의 시간을하지 않고 도망 수 있지만 EF는하지 않습니다.

+0

감사합니다. 하지만 그래, 네가 말했듯이 여전히 지원되지 않는다. : – stucampbell

+0

아직 아무런 해결책이 없습니까? (* SQL 함수 외에 *?) –

-1

당신은 AsEnumerable()

을 포함해야합니다.

var rowTarget = 
    mainQuery.AsEnumerable() 
     .Select((obj, index) => new { obj.ID, Index = index }) 
     .SingleOrDefault(x => x.ID == targetID); 
+0

'AsEnumerable'은 데이터베이스에서 모든 레코드를 끌어 내려서 목적을 이길 것입니다. – jordanbtucker

+0

이것은 실제로 해결책이 아니며 누군가 투표 해주세요. – Adaptabi

+0

DotNetWise가 말하듯이 현재 최상위에 표시되어 있기 때문에 Downvoting이 있지만 이는 해결책이 아닙니다. – stucampbell