如何找到一个行的ROW_NUMBER()与LINQ到SQL(How to find the ROW_

2019-09-23 04:54发布

LINQ到SQL利用的ROW_NUMBER()分页的目的,即当您使用跳过()和Take()。

不过,我似乎无法找到实际访问的方式ROW_NUMBER()查询值自己。 我需要找到一个查询中的记录的ROW_NUMBER()( 不把所有的记录回 )。

我在T-SQL和LINQ successfuly做到了这一点,以对象,但LINQ到SQL的解决方案被证明是难以捉摸的。

在LINQ到对象我能得到这样的行数:

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

// rowTarget.Index is the answer

但LINQ到SQL不支持的替代Select()使用索引参数(这是有道理的,真的- ROW_NUMBER()将仅跳过()使用,以()正在使用)。

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

这甚至可能吗?

Answer 1:

(编辑:试了一下,还是给了“ Unsupported overload used for query operator 'Select' ”)...

你为什么要使用SelectMany在这里? 你是否已经版本试过Select ,其中包括指数?

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

你也应该可能包括明确的OrderBy - LINQ到SQL让你走没有它的大部分时间,但EF不会。



Answer 2:

你必须包括AsEnumerable()

即。

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


文章来源: How to find the ROW_NUMBER() of a row with Linq to SQL