带有分页和 where 子句的 IdentityUser table 的 MVC SqlQuery
MVC SqlQuery of IdentityUser table with paging and where clause
我想查询我网站的用户...这些存储在 AspNetUsers table 中,并且有额外的字段,如我的 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();
我收到错误:"The result type 'System.Collections.Generic.IEnumerable`1[OhansonsLib.OhansonsUser]' may not be abstract and must include a default constructor."
注意:它确实有一个默认构造函数。
您必须直接传递模型类型,而不是您期望的集合类型。然后它会尝试实例化该类型并执行基于该类型的映射。所以产生异常是因为接口不是具体类型并且永远无法实例化。如果您查看文档,它将 return 类型 DbRawSqlQuery<TElement>
本身实现 IEnumerable<TElement>
.
顺便说一下,您还可以使用 Skip
和 Take
直接使用 Lambdas 实现分页。示例(假设 DbContext 上的 DbSet 名为 Users
)。
int pageSize = 20, pageIndex = 0;
var users = OhansonsDbContext.Users.OrderBy(user => user.Id).Skip(pageSize * pageIndex).Take(pageSize).ToList();
我想查询我网站的用户...这些存储在 AspNetUsers table 中,并且有额外的字段,如我的 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();
我收到错误:"The result type 'System.Collections.Generic.IEnumerable`1[OhansonsLib.OhansonsUser]' may not be abstract and must include a default constructor."
注意:它确实有一个默认构造函数。
您必须直接传递模型类型,而不是您期望的集合类型。然后它会尝试实例化该类型并执行基于该类型的映射。所以产生异常是因为接口不是具体类型并且永远无法实例化。如果您查看文档,它将 return 类型 DbRawSqlQuery<TElement>
本身实现 IEnumerable<TElement>
.
顺便说一下,您还可以使用 Skip
和 Take
直接使用 Lambdas 实现分页。示例(假设 DbContext 上的 DbSet 名为 Users
)。
int pageSize = 20, pageIndex = 0;
var users = OhansonsDbContext.Users.OrderBy(user => user.Id).Skip(pageSize * pageIndex).Take(pageSize).ToList();