我有一个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版本。我错过了什么,或者这不是这样做的吗?
答案 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条记录。