我想查询我的网站的用户.它们存储在AspNetUsers表中,并具有OhansonsUser对象中定义的额外字段,该对象继承于IdentityUser,如下所示:
public class OhansonsUser : IdentityUser<long, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
....
}我试图提出以下查询:
var sql = @"
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY Id ) AS RowNum, *
FROM AspNetUsers
WHERE Id > 2
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 20
ORDER BY RowNum
";
var users = Global.OhansonsDbContext.Database.SqlQuery<IEnumerable<OhansonsUser>>(sql).ToList();我得到了一个错误:“结果类型'System.Collections.Generic.IEnumerable`1OhansonsLib.OhansonsUser‘可能不是抽象的,必须包括一个默认构造函数。”
注意:它确实有一个默认的构造函数。
发布于 2016-08-24 18:46:22
您必须直接传递模型类型,而不是您期望的集合类型。然后尝试实例化该类型并根据该类型执行映射。因此会产生异常,因为接口不是具体类型,永远无法实例化。如果您查看文档,它将返回类型DbRawSqlQuery<TElement>,它本身实现了IEnumerable<TElement>。
顺便说一下,您还可以使用Skip和Take直接使用Lambdas实现分页。示例(假设DbContext上的DbContext被命名为Users)。
int pageSize = 20, pageIndex = 0;
var users = OhansonsDbContext.Users.OrderBy(user => user.Id).Skip(pageSize * pageIndex).Take(pageSize).ToList();https://stackoverflow.com/questions/39130661
复制相似问题