LINQクエリまたはエンティティにROW_NUMBERを追加するにはどうすればいいですか? 質問する

LINQクエリまたはエンティティにROW_NUMBERを追加するにはどうすればいいですか? 質問する

この簡単なデータの問題に困惑しています。

私は Entity Framework を使用しており、製品のデータベースを持っています。結果ページには、これらの製品のページ区切りリストが返されます。現在、結果は各製品の販売数で順序付けられているため、コードは次のようになります。

return Products.OrderByDescending(u => u.Sales.Count());

これは、販売数でソートされたエンティティの IQueryable データセットを返します。

結果ページに各製品(データセット内)のランクを表示したいと思います。結果は次のようになります。

Page #1
1. Bananas
2. Apples
3. Coffee

Page #2
4. Cookies
5. Ice Cream
6. Lettuce

SQL ROW_NUMBER 変数を使用して結果に列を追加したいのですが、この列を結果データテーブルに追加する方法がありません。

結果のページには foreach ループが含まれていますが、ページ区切りのセットを使用しているため、その番号を使用してランキング番号を偽装するのは最善の方法ではないと思います。

私の質問は、この場合、クエリ結果に ROW_NUMBER 列を追加するにはどうすればいいかということです。

ベストアンサー1

LINQ to Entitiesに直接変換されるものはありませんROW_NUMBER。メモリ内の回避策として、Select のインデックスオーバーロード:

var start = page * rowsPerPage;
Products.OrderByDescending(u => u.Sales.Count())
    .Skip(start)
    .Take(rowsPerPage)
    .AsEnumerable()
    .Select((u, index) => new { Product = u, Index = index + start });

おすすめ記事