C# 实体框架SqlQuery未返回行号()值

C# 实体框架SqlQuery未返回行号()值,c#,entity-framework,C#,Entity Framework,我有一个SELECT语句,它返回表中所有其他字段的行数值。查询非常简单,并且在SSMS中工作: SELECT *, CAST(ROW_NUMBER() OVER(ORDER BY TablePrimaryKey) AS INT) AS [RowNumber] FROM TableName WHERE TablePrimaryKey > 10 在实际的应用程序中,WHERE语句要复杂得多,但为了简单起见,我这样说 在我的项目中,我创建了一个包含RowNumb

我有一个SELECT语句,它返回表中所有其他字段的行数值。查询非常简单,并且在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类的表中创建其他列:


问题是,使用EntityFramework的SqlQuery方法,它会按应有的方式返回表中的所有列,但RowNumber始终为0。我使用的是实体框架6.1版本。我错过了什么,还是不能这样做?

这是在评论中回答您的问题

将main作为SELECT*,按PrimaryKeyId排序的行号作为 [TableName]中的“行数”,其中[month]=10,[year]=2014 从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条记录。

可能是我看到的答案的重复,它可以工作,但我遇到了另一个问题。以这种方式从数据库中获取具有行数值的对象列表效果很好。问题是,如果用户希望获得行数为2的特定记录,我们不必总是从数据库返回所有记录,然后在返回列表中搜索该记录。如果您使用的是实体框架,为什么要使用SqlQuery而不是EF提供的本机Linq查询?好的,您能帮助我如何使用Linq编写此查询吗:main为SELECT*,ROW_NUMBER OVERORDER BY PrimaryKeyId为[TableName]中的'rowname',其中[month]=10和[year]=2014从main中选择*其中RowNumber=2我只想在ASP.MVC项目的编辑页面上获得该记录的row_number值以及所有其他属性。
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]