无法在Entity Framework中使用SQL查询获取数据

Kay*_*yra 3 c# sql entity-framework

我正在尝试使用以下SQL查询从我的数据库中获取前两列数据:

SELECT  Id, DomainUrl
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY Id ) AS RowNum, Id, DomainUrl
          FROM      SiteDatas
        ) AS RowConstrainedResult
WHERE   RowNum >= 1
    AND RowNum <= 10
ORDER BY RowNum
Run Code Online (Sandbox Code Playgroud)

我正在使用实体框架并为行传入参数,以便稍后可以通过ajax将其用作加载函数的滚动.但是当我到达该行时,我收到一个错误:

var stores = db.SiteDatas.SqlQuery(SQL, parameters).ToList();
Run Code Online (Sandbox Code Playgroud)

这是一个实体命令执行异常,它声明数据读取器与类型的指定模型(我的数据库)成员"机器人"(我正在调用的那个之后的下一列)不兼容,没有相应的数据读取器中具有相同名称的列.

我怎么能以一种可以序列化为json的方式获得前两列?

Pan*_*vos 7

DbSet.SqlQueryDatabase.SqlQuery命令都返回实体实例.您的SQL查询必须返回与您的实体相同的列.最有可能的是,您的SiteData类包含RobotsSQL查询中不存在的列.

如果指定了返回类型,仍可以使用Database.SqlQuery <T>返回数据.返回类型不必是实体类型,只是具有与结果集相同的列名.

假设db是一个DbContext实例,你可以写:

public class MyResults
{
   public int ID{get;set;}
   public string DomainUrl {get;set;}
}

...

var stores = db.Database.SqlQuery<MyResults>(SQL, parameters).ToList();
Run Code Online (Sandbox Code Playgroud)