Tôi biết đây là một câu hỏi cũ (như, 5 tuổi) nhưng tôi đã phải vật lộn với điều tương tự. Câu trả lời đầy đủ nằm trong các bình luận cho câu trả lời khác, nhưng tôi nghĩ rằng tôi sẽ cung cấp một ví dụ đầy đủ ở đây.
string query = "SELECT * FROM MyTableName WHERE Foo = @Foo AND Bar = @Bar";
Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary.Add("@Foo", "foo");
dictionary.Add("@Bar", "bar");
var results = connection.Query<MyTableName>(query, new DynamicParameters(dictionary));
Hoặc, để hoàn toàn động, bạn có thể tạo một phương thức như thế này, phương thức này sẽ nhận bất kỳ mô hình nào, bất kỳ truy vấn nào và bất kỳ tập hợp tham số truy vấn nào:
public static IEnumerable<T> Get<T>(string query, Dictionary<string, object> dictionary)
{
IEnumerable<T> entities = connection.Query<T>(query, new DynamicParameters(dictionary));
return entities;
}
Và sau đó để gọi phương thức này:
var results = Get<MyTable>(query, dictionary)
CHỈNH SỬA DÀI SAU
Câu trả lời này tiếp tục nhận được sự ủng hộ, vì vậy đây rõ ràng vẫn là một nhu cầu. Tôi đã sử dụng giải pháp này và tạo toàn bộ gói NuGet truy cập dữ liệu được xây dựng trên Dapper. Nó giảm CRUD và các hoạt động truy vấn của bạn thành một dòng mã.
Đây là gói NuGet .
new DynamicParameters(dictionary)
và nó sẽ hoạt động tốt.