2009-08-12 5 views
7

Linq to SQLは、ページングの目的で、つまりSkip()およびTake()を使用するときにROW_NUMBER()を使用します。LinqからSQLへの行のROW_NUMBER()の検索方法

しかし、私は実際にクエリ内でROW_NUMBER()の値にアクセスする方法を見つけることができません。クエリ内のレコードのROW_NUMBER()を見つける必要があります()。レコードをすべてに戻す必要はありません。

私はこれをT-SQLとLinq to Objectsで成功させましたが、Linq to SQLソリューションは難解です。うROW_NUMBER()を -

しかし、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

(編集:それを試してみました。まだ "Unsupported overload used for query operator 'Select'" を与える)...

なぜ、あなたはここにSelectManyを使用していますか?インデックスを含むSelectのバージョンで試してみましたか?

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

また、おそらく、明示的OrderByを含まなければならない - LINQツーSQLは、あなたがそれなしで離れてほとんどの時間を取得することができますが、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のように現在はトップに表示されているので、これを下降させることは解決策ではありません。 – stucampbell

関連する問題