如何将ROW_NUMBER添加到LINQ查询或实体?

asp.net entity-framework linq

我被这个简单的数据问题困扰了。

我正在使用Entity框架并拥有一个产品数据库。我的结果页面返回这些产品的分页列表。现在我的结果按每个产品的销售数量排序,所以我的代码如下所示:

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列?

热门答案

使用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 });



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因