有UserManager
的签名方法(ASP .NET Identity Core 默认实现):
public Task<IList<string>> GetRolesAsync(User user) {
const string query = @"
select r.[Name]
from [UserRoles] ur
left join [Roles] r on r.RoleId = ur.RoleId
where ur.UserId = @userId;
";
return Task.Factory.StartNew(() => {
using (SqlConnection connection = new SqlConnection(_connectionString))
return connection.Query<string>(query, new { userId = user.UserId });
});
}
但不幸的是Dapper.Query<T>
返回 IEnumerable<T>
.
是否可以返回IList<T>
还是我必须自己进行转换?
最佳答案
Dapper 只保证给你一个 IEnumerable<T>
.所以你应该只假设。特别是,它已经有不同的场景,可以为您提供填充列表,或延迟迭代器。
最简单的方法就是调用 .ToList()
.如果您打算避免分配,则可以进行推测性测试:
static IList<T> SpeculativeToList<T>(this IEnumerable<T> source)
{
return source as IList<T> ?? source.ToList();
}
关于c# - IEnumerable 到 IList 的转换(Dapper 返回结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21646674/