c# - IEnumerable 到 IList 的转换(Dapper 返回结果)

标签 c# .net 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 });
    });
}

但不幸的是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/

相关文章:

jquery - 在 Controller Viewdata 的 Jquery 模式中显示成功/失败消息

c# - 使用转换后的发布配置部署本地 Web 应用程序

c# - Silverlight 项目编译失败

c# - SpeechRecognitionEngine.InstalledRecognizers 返回未安装识别器

c# - 将表单数据和文件发布到 ASP.NET Web API

c# - if 语句中的 MVC @HTML.Action 导致问题

c# - 将服务 "display name"转换为 "key name"C#

.net - 编辑 WMA 标签的最佳 .Net 库?

.NET:从串口读取数据

c# - 为什么我的 List 对象不包含 'Add' 的定义?