Dapper에 대한 동적 객체를 프로 시저로 만듭니다.

ado.net c# dapper sql-server tsql

문제

ExpandoObject 객체를 만드는 방법에 대한 많은 게시물을 ExpandoObject 제 경우에는 작동하지 않습니다. 나는 같은 대상을 만들어야한다.

var someObj = new {
    term1 = "someValue",
    term2 = "other",
    ...
};

기본적으로 우리는 Dapper 를 사용하고 있으며 WHERE 절이 지정된 인수 배열에서 조작되는 쿼리를 동적으로 만들어야합니다. 우리는 쿼리를 일반화 하지 않습니다 ! 이것은 가변 인수를받는 단일 메소드이고, 우리는 하나의 컬럼에서 OR 각 값을 점검해야합니다.

지금 당장 실행 가능한 유일한 솔루션은 System.Data.SqlClient.SqlConnection 을 되돌리고 직접 사용하는 것입니까? 아니면이 방법을 사용할 수있는 방법이 있습니까?

최신 정보:

이것은 대부분 일을해야하는지,하지만하지 않습니다 :

string inWhere = null;
dynamic inTerms = new ExpandoObject();
IDictionary<string, object> inTermsDict = inTerms;

if (!(string.IsNullOrEmpty(filter.Term) || string.IsNullOrWhiteSpace(filter.Term))) {
    inWhere = "(" + string.Join(" OR ", filter.Terms.Select((t, i) => "{0} LIKE @p" + i)) + ")";
    int termIndex = 0;
    foreach (string term in filter.Terms) {
        inTermsDict.Add("p" + (termIndex++), term);
    }
}

// ...

var rows = db.Query("SELECT * FROM {table} WHERE {baseCondition}" +
     (string.IsNullOrEmpty(inWhere) ? "" : string.Format(" AND " + inWhere, "columnName")),
     inTerms as object);

수락 된 답변

그냥 내 자신의 질문에 대답하기 위해, 우리는 오늘 적절한 해결책을 찾았습니다.

간단히 말하면, 우리는 IDynamicParameters 발견했습니다. 그리고이 클래스는 단순히 Dictionary 으로 모든 것을 해결합니다.

var inTerms = new Dapper.DynamicParameters();

inTerms.Add("@p" + (termIndex++), somveValue);

모두 행복합니다!



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow