2011-09-19 4 views
5

私は、OrderBy()、Skip()、Take()が正しく動作するLINQの式にいくつかの問題がある

var a = ctx.EntitySet 
     .OrderByDescending(t => t.Property) 
     .Skip(pageIndex * size) 
     .Take(size); 

のようなLINQ式があります。OrderBy()はSkip()とTake()の前に呼び出す必要がありますが、最後はソートが行われます。この問題を解決することはできますか?

申し訳ありませんが、多くの人が私の質問を理解していませんでした。クエリはエラーなしで実行されますが、

//It is I want 
1) Sorting ALL data 
2) Use Skip() and Take() 

私の例では好きなようにしています: 1)Skip() 2)Take() 3)

+1

を役に立てば幸い、実際の問題は何ですか? – cjk

+0

クエリは正常に表示されているので、生成されたSQLクエリはそのまま出力されるため、正常に表示される可能性があります。 http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx –

+0

あなたが望む情報を持っていれば、答えとしてマークするのを忘れないでください –

答えて

0

はあなたが解決策以下のために行く場合、それは最初のレコードを取得し、間違った結果にあなたを導くことがあり、レコードというのソートんよります。この

を試してみました。

var a = ctx.EntitySet 
     .Skip(pageIndex * size) 
     .Take(size); 

a = a.OrderByDescending(t => t.Property); 

または

あなたが最初にソートやって道に続いて、あなたが望む結果を得ることができるこの方法によってので、その後にレコードを取得するよりも、これは

var a = ctx.EntitySet 
    .OrderByDescending(t => t.Property) 
    .Skip(pageIndex * size) 
    .Take(size); 

を行うための適切な方法でありますしかし、それはいつもあなたが望むものに依存しています。

0

このサンプルのコマンドオーダーは重要ではありません。最初にデータをソートした後、データが収集されます。

2

私はなぜ知らないが、何とかそれは私の作品、これはそれを行うための適切な方法である、それはあなたに

var a1 = from p in ctx.EntitySet 
     .OrderByDescending(t => t.Property) 
     select p; 

var a2 = from p in a1 
     .Skip(pageIndex * size) 
     .Take(size) 
     select p; 
関連する問題