动态更新字段
public void UpdateUserDynamic(User user, List<string> propertiesToUpdate)
{
var parameters = new DynamicParameters();
var setClauses = new List<string>();
parameters.Add("Id", user.Id);
foreach (var prop in propertiesToUpdate)
{
var value = typeof(User).GetProperty(prop)?.GetValue(user);
parameters.Add(prop, value);
setClauses.Add($"{prop} = @{prop}");
}
string sql = $"UPDATE Users SET {string.Join(", ", setClauses)} WHERE Id = @Id";
using (var connection = new SqlConnection(connectionString))
{
connection.Execute(sql, parameters);
}
}
public void UpdateUserPartial(int id, object updateFields)
{
var properties = updateFields.GetType().GetProperties();
var setClauses = properties.Select(p => $"{p.Name} = @{p.Name}").ToList();
string sql = $"UPDATE Users SET {string.Join(", ", setClauses)} WHERE Id = @Id";
var parameters = new DynamicParameters(updateFields);
parameters.Add("Id", id);
using (var connection = new SqlConnection(connectionString))
{
connection.Execute(sql, parameters);
}
}
// 调用示例
UpdateUserPartial(1, new { Name = "New Name", Email = "new@email.com" });
查询返回的 List 类型
using (var connection = new SqlConnection(connectionString))
{
var result = connection.Query("SELECT Id, Name FROM Users WHERE Age > @Age",
new { Age = 18 }).ToList();
// result 是 List<dynamic> 类型
foreach (var item in result)
{
Console.WriteLine($"Id: {item.Id}, Name: {item.Name}");
}
}
// 定义目标类型
public class UserDto
{
public int Id { get; set; }
public string Name { get; set; }
}
// 查询并映射
using (var connection = new SqlConnection(connectionString))
{
var result = connection.Query<UserDto>(
"SELECT Id, Name FROM Users WHERE Age > @Age",
new { Age = 18 }).ToList();
// result 是 List<UserDto> 类型
}
using (var connection = new SqlConnection(connectionString))
{
var queryParams = new { MinAge = 18, MaxAge = 30 }; // 匿名参数
var result = connection.Query<UserDto>(
"SELECT Id, Name FROM Users WHERE Age BETWEEN @MinAge AND @MaxAge",
queryParams).ToList();
}
using (var connection = new SqlConnection(connectionString))
{
var sql = @"SELECT u.*, p.*
FROM Users u
JOIN Posts p ON u.Id = p.UserId
WHERE u.Age > @Age";
var result = connection.Query(sql, new { Age = 18 },
(User user, Post post) => new { User = user, Post = post })
.ToList();
// result 是 List<匿名类型{User, Post}> 类型
}
using (var connection = new SqlConnection(connectionString))
{
var result = connection.Query("SELECT Id, Name FROM Users")
.Select(x => (IDictionary<string, object>)x)
.ToList();
// 现在可以像字典一样访问
foreach (var row in result)
{
Console.WriteLine($"Id: {row["Id"]}, Name: {row["Name"]}");
}
}