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 非常轻量自然,关键记住方法名和泛型参数对应你要的元素类型,不是集合类型。
