我正在尝试使用以下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
我正在使用实体框架并为行传入参数,以便稍后可以通过ajax将其用作加载函数的滚动。但是当我到达这条线时,我收到了一个错误:
var stores = db.SiteDatas.SqlQuery(SQL, parameters).ToList();
这是一个实体命令执行异常,它声明数据读取器与类型的指定模型(我的数据库)成员“机器人”(我正在调用的那个之后的下一列)不兼容,不会在数据阅读器中有相应的列具有相同的名称。
我如何以可以序列化为json的方式获取前两列?
答案 0 :(得分:7)
DbSet.SqlQuery和Database.SqlQuery命令都返回实体实例。您的SQL查询必须返回与您的实体相同的列。最有可能的是,您的SiteData类包含SQL查询中不存在的Robots
列。
如果指定了返回类型,您仍然可以使用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();