相关疑难解决方法(0)

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

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

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

return Products.OrderByDescending(u => u.Sales.Count());
Run Code Online (Sandbox Code Playgroud)

这将返回我的实体的IQueryable数据集,按销售数量排序.

我希望我的结果页面显示每个产品的排名(在数据集中).我的结果应如下所示:

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

Page #2
4. Cookies
5. Ice Cream
6. Lettuce
Run Code Online (Sandbox Code Playgroud)

我希望我只想在结果中使用SQL ROW_NUMBER变量添加一列...但我不知道如何将此列添加到我的结果数据表中.

我的结果页面确实包含一个foreach循环,但由于我使用的是分页集,我猜测使用该数字来伪造排名数字不是最好的方法.

所以我的问题是,在这种情况下,如何在查询结果中添加ROW_NUMBER列?

linq asp.net entity-framework

23
推荐指数
2
解决办法
3万
查看次数

如何使用Linq to SQL查找行的ROW_NUMBER()

Linq to SQL ROW_NUMBER()用于分页目的,即当你使用Skip()和Take()时.

但是,我似乎无法ROW_NUMBER()在查询中找到实际访问值的方法.我需要在查询中找到记录的ROW_NUMBER()(不带回所有记录).

我在T-SQL和Linq to Objects中成功完成了这项工作,但Linq to SQL解决方案难以实现.

在Linq to Objects中我可以得到如下行号:

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

// rowTarget.Index is the answer
Run Code Online (Sandbox Code Playgroud)

但Linq to SQL不支持Select()使用索引参数的覆盖(这是有道理的,实际上 - ROW_NUMBER()只有在使用Skip()和Take()时才会使用).

我似乎找不到一个不会导致从数据库返回所有记录的解决方案.

这甚至可能吗?

.net c# linq-to-sql

7
推荐指数
1
解决办法
7198
查看次数

使用NHibernate选择每第n行

您将如何使用NHibernate QueryOver,HQL或Criteria实现选择每第n行的查询?

目前我使用以下T-SQL查询:

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Id) AS [Row]
    FROM [TABLE_NAME]
) x WHERE (x.[Row] % 100) = 0
Run Code Online (Sandbox Code Playgroud)

(感谢Marc Gravell)

sql sql-server nhibernate

5
推荐指数
1
解决办法
589
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

entity-framework ×1

linq ×1

linq-to-sql ×1

nhibernate ×1

sql ×1

sql-server ×1