Dapper 用 Query() 直接返回 List,自动映射每行到 T 实例;列名与属性名大小写不敏感匹配,支持简单类型、元组及匿名类型;勿误用 QueryFirstOrDefault。

Dapper 查询数据库并返回 List 非常直接,核心就是用 Query 方法,它默认就返回泛型列表。
使用 Query() 直接获取 List
Dapper 的 Query 方法执行查询后,会自动将每一行结果映射为类型 T 的实例,并装入 List 返回。不需要手动转换或调用 ToList()(虽然加了也不报错)。
- 确保你的实体类(如
User)的属性名与 SQL 查询的列名(或别名)**大小写不敏感匹配**(Dapper 默认忽略大小写) - 列名和属性名完全一致最稳妥;若不一致,可用 SQL 别名对齐,例如:
SELECT Id AS UserId, Name AS UserName FROM Users - 支持匿名类型、自定义类、内置类型(如
Query)()
基础示例:查用户列表
using (var conn = new SqlConnection(connectionString))
{
var users = conn.Query("SELECT * FROM Users WHERE Status = @status",
new { status = 1 });
// users 是 List 类型,可直接遍历或返回
} 注意:这里 users 的运行时类型就是 List(准确说是 GridReader 内部构建的 List),不是 IEnumerable 延迟执行——Dapper 默认立即执行并缓存结果。
想返回 List、List 等简单类型?一样可以
只要 SQL 查询只返回单列,就能映射为简单类型的集合:
-
conn.Query→("SELECT Id FROM Users") List -
conn.Query→("SELECT Name FROM Users") List - 也支持元组:
conn.Query("SELECT Id, Name FROM Users")
小提醒:别误用 QueryMultiple 或 QueryFirstOrDefault
如果你写了 QueryFirstOrDefault,那是错的——这会让 Dapper 尝试把整张表“第一行”映射成一个 >()
List 对象,必然失败或为空。正确做法始终是 Query。
需要多结果集才用 QueryMultiple();要单个对象用 QueryFirstOrDefault;要列表,就认准 Query。
基本上就这些。Dapper 返回 List 非常轻量自然,关键记住方法名和泛型参数对应你要的元素类型,不是集合类型。










