Dapper如何返回List集合 Dapper查询列表数据方法

来源:这里教程网 时间:2026-02-21 17:40:03 作者:

Dapper 查询数据库并返回

List<t></t>
非常直接,核心就是用
Query<t>()</t>
方法,它默认就返回泛型列表。

使用 Query() 直接获取 List

Dapper 的

Query<t>()</t>
方法执行查询后,会自动将每一行结果映射为类型
T
的实例,并装入
List<t></t>
返回。不需要手动转换或调用 ToList()(虽然加了也不报错)。

确保你的实体类(如
User
)的属性名与 SQL 查询的列名(或别名)**大小写不敏感匹配**(Dapper 默认忽略大小写)
列名和属性名完全一致最稳妥;若不一致,可用 SQL 别名对齐,例如:
SELECT Id AS UserId, Name AS UserName FROM Users
支持匿名类型、自定义类、内置类型(如
Query<int>()</int>

基础示例:查用户列表

using (var conn = new SqlConnection(connectionString))
{
    var users = conn.Query<User>("SELECT * FROM Users WHERE Status = @status", 
                                    new { status = 1 });
    // users 是 List<User> 类型,可直接遍历或返回
}

注意:这里

users
的运行时类型就是
List<user></user>
(准确说是
GridReader
内部构建的
List<t></t>
),不是
IEnumerable<user></user>
延迟执行——Dapper 默认立即执行并缓存结果。

想返回 List、List 等简单类型?一样可以

只要 SQL 查询只返回单列,就能映射为简单类型的集合:

conn.Query<int>("SELECT Id FROM Users")</int>
List<int></int>
conn.Query<string>("SELECT Name FROM Users")</string>
List<string></string>
也支持元组:
conn.Query("SELECT Id, Name FROM Users")

小提醒:别误用 QueryMultiple 或 QueryFirstOrDefault

如果你写了

QueryFirstOrDefault<list>>()</list>
,那是错的——这会让 Dapper 尝试把整张表“第一行”映射成一个
List<user></user>
对象,必然失败或为空。正确做法始终是
Query<user>()</user>

需要多结果集才用

QueryMultiple()
;要单个对象用
QueryFirstOrDefault<user>()</user>
;要列表,就认准
Query<t>()</t>

基本上就这些。Dapper 返回 List 非常轻量自然,关键记住方法名和泛型参数对应你要的元素类型,不是集合类型。

相关推荐