0

基本的に同じことを行う 2 ビットのコードがありますが、結果は異なります。データベース内の順序付けられたリストからレコードのインデックス番号を取得しようとしており、スキップして結果を取得しようとしています。

Linq メソッド:

int index = db.users.OrderByDescending(o => o.TotalScore)
              .ToList()
              .FindIndex(f => f.UserId == User.UserId); 
               // returns 557

SQL メソッド:

WITH IndexedUsers AS (
  SELECT UserId, 
     ROW_NUMBER() OVER (ORDER BY TotalScore desc) AS 'RowNumber'
  FROM [User]  
) 
SELECT RowNumber
FROM IndexedUsers 
WHERE UserId = @userId
//Returns 559

ここの違いにビックリ。データベースのユーザー コレクションで ToList を呼び出したくありません。テスト目的で使用しているだけです。FindIndex メソッドが 0 ベースの場合、結果は 1 アウトになると思います。値が同じではない理由はありますか?

4

0 に答える 0