반응형
Dapper 쿼리에 대한 인수를 동적으로 만드는 방법
값 사전이 있습니다. 예 : "Name": "Alex"
이것을 Dapper에 쿼리에 대한 인수로 전달하는 방법이 있습니까?
다음은 내가 원하는 것을 보여주는 예입니다.
IDictionary<string, string> args = GetArgsFromSomewhere();
string query = "select * from people where Name = @Name";
var stuff = connection.Query<ExtractionRecord>(query, args);
예:
var dbArgs = new DynamicParameters();
foreach(var pair in args) dbArgs.Add(pair.Key, pair.Value);
그런 다음 dbArgs
대신 전달 args
:
var stuff = connection.Query<ExtractionRecord>(query, dbArgs);
또는를 구현하는 고유 한 클래스를 작성할 수 있습니다 IDynamicParameters
.
객체에서 시작하는 경우 (dapper의 일반적인 접근 방식)이 템플릿을 DynamicParameters
시작점으로 사용할 수도 있습니다 .
var dbArgs = new DynamicParameters(templateObject);
나는 이것이 오래된 질문 (예 : 5 살)이라는 것을 알고 있지만 같은 문제로 어려움을 겪고있었습니다. 완전한 대답은 다른 대답에 대한 주석에 있지만 여기에 완전한 예를 제공 할 것이라고 생각했습니다.
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));
또는 완전히 동적이되도록 모든 모델, 쿼리 및 쿼리 매개 변수 집합을 사용하는 다음과 같은 메서드를 만들 수 있습니다.
public static IEnumerable<T> Get<T>(string query, Dictionary<string, object> dictionary)
{
IEnumerable<T> entities = connection.Query<T>(query, new DynamicParameters(dictionary));
return entities;
}
그리고이 메서드를 호출하려면 :
var results = Get<MyTable>(query, dictionary)
ExpandoObject
Dapper 특정 클래스 대신를 쿼리의 매개 변수로 사용할 수도 있습니다 DynamicParameters
.
ExpandoObject param = new ExpandoObject();
IDictionary<string, object> paramAsDict = param as IDictionary<string, object>;
paramAsDict.Add("foo", 42);
paramAsDict.Add("bar", "test");
MyRecord stuff = connection.Query<MyRecord>(query, param);
참고 URL : https://stackoverflow.com/questions/9481678/how-to-create-arguments-for-a-dapper-query-dynamically
반응형
'code' 카테고리의 다른 글
SQLite에 존재하지 않는 경우 ALTER TABLE ADD COLUMN (0) | 2020.10.19 |
---|---|
Powershell : 스크립트에 오류가 표시되지 않도록하려면 어떻게해야합니까? (0) | 2020.10.19 |
var없이 객체 분해 (0) | 2020.10.19 |
sudo로도 / usr / bin 내부에 심볼릭 링크를 만들 수 없습니다. (0) | 2020.10.19 |
DIFF 유틸리티는 2 개의 파일에 대해 작동합니다. (0) | 2020.10.19 |