3

我正在尝试使用以下 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 的方式仅获取前两列?

4

1 回答 1

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();
于 2013-07-16T10:04:54.150 回答