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

stu*_*ell 7 .net c# linq-to-sql

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()时才会使用).

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

这甚至可能吗?

Mar*_*ell 2

(编辑:尝试过;仍然给出“ Unsupported overload used for query operator 'Select'”)...

你为什么用SelectMany在这里?Select您是否尝试过包含索引的版本?

.Select((obj, index) => new { obj.ID, Index = index })
    .SingleOrDefault(x => x.ID == targetID);
Run Code Online (Sandbox Code Playgroud)

您可能还应该包含一个显式的OrderBy- LINQ-to-SQL 可以让您在大多数情况下无需使用它,但 EF 却不能。