实体框架SqlQuery没有返回row_number()值

时间:2014-10-26 09:28:43

标签: c# entity-framework

我有一个SELECT语句,它返回row_number()值以及table中的所有其他字段。查询非常简单,并且在SSMS中工作:

SELECT 
    *, CAST(ROW_NUMBER() OVER(ORDER BY TablePrimaryKey) AS INT) AS [RowNumber]
FROM 
    TableName 
WHERE 
    TablePrimaryKey > 10

(在实际应用程序中WHERE语句要复杂得多,但为了简单起见,我就这样说了。)

在我的项目中,我创建了一个包含RowNumber属性(包含所有其他必需属性)的POCO类

...
public int RowNumber { get; set; }
...

我确保迁移不会在我entityConfiguration类的表格中创建其他列:

this.Ignore(x => x.RowNumber);

问题在于,使用Entity Framework的SqlQuery()方法,它会返回表中的所有列,但RowNumber始终为0.我使用的是Entity Framework 6.1版本。我错过了什么,或者这不是这样做的吗?

1 个答案:

答案 0 :(得分:0)

这是在评论中回答你的问题。

  

WITH main AS(SELECT *,ROW_NUMBER()OVER(ORDER BY PrimaryKeyId)AS   ' ROWNUMBER' FROM [TableName] WHERE [month] = 10 AND [year] = 2014)   SELECT * FROM main WHERE RowNumber = 2

C#/ EF代码:

int RowNumber = 2;
var row = TableName.OrderBy(t=>t.PrimaryKeyId).Skip(RowNumber -1).Take(1);

生成的SQL如下所示:

DECLARE @p0 Int = 1
DECLARE @p1 Int = 1

SELECT [t1].[ID], [t1].c1 FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ID]) AS [ROW_NUMBER], 
           [t0].[ID], [t0].c1
    FROM [TableName] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]

我正在使用Linq-to-SQL,EF应该类似:排序在服务器端,它只返回1条记录。