FSo*_*ou1 4 .net c# asp.net-mvc dapper
有方法签名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 });
});
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是Dapper.Query<T>
返回IEnumerable<T>
.
是否有可能返回IList<T>
或我必须自己进行转换?
Mar*_*ell 16
Dapper只保证交给你一个IEnumerable<T>
.所以你应该只假设这一点.特别是,它已经拥有了不同的场景中它可以给你任何一个填充的列表,或延期迭代器.
最简单的方法就是打电话.ToList()
.如果您打算避免使用alloc,那么可以进行推测测试:
static IList<T> SpeculativeToList<T>(this IEnumerable<T> source)
{
return source as IList<T> ?? source.ToList();
}
Run Code Online (Sandbox Code Playgroud)
Sel*_*enç -3
尝试使用显式强制转换
return (IList<string>)connection.Query<string>(query, new { userId = user.UserId });
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3978 次 |
最近记录: |