Dapper.SqlBuilder 및 OrWhere를 사용하여 동적 SQL 쿼리를 작성하는 방법

dapper sqlbuilder

문제

여러 검색어에 대한 동적 SQL 쿼리를 작성하려고합니다. 내가 일반적으로 빌더를 사용하는 방법을 이해하지만, 실제로는 @term이 매번 (나는 생각할 때마다) 달라지기 때문에 루프에서 무엇을 할 지 확신하지 못한다. 쿼리뿐만 아니라 익명 형식에서도 일치시킬 수 있습니다.

쿼리 문자열에서 string.Format을 사용할 수는 있지만 익명 형식으로 일치시키는 방법을 모르십니까?

public async Task<List<Thing>> Search(params string[] searchTerms)
{
    var builder = new SqlBuilder();
    var template = builder.AddTemplate("SELECT * /**select**/ from ThingTags /**where**/ ");

    for (int i = 0; i < searchTerms.Length; i++)
    {
        builder.OrWhere("value LIKE @term", new { term = "%" + searchTerms[i] + "%" });
    }
...
}

현재 양식에서 용어 "abc" "def" "ghi"에 대해 생성 된 쿼리는 다음과 같습니다.

CommandType: Text, CommandText: SELECT *  from ThingTags WHERE  ( value LIKE @term OR value LIKE @term OR value LIKE @term ) 

Parameters:
Name: term, Value: %ghi%

인기 답변

여기서 쿼리 작성을 수행하는 한 가지 방법이 있습니다. 처음에는 매개 변수가 사전이 될 수 있다는 것을 알지 못했습니다.

public async Task<List<Thing>> Search(params string[] searchTerms)
{
var builder = new SqlBuilder();
var template = builder.AddTemplate("SELECT * /**select**/ from ThingTags /**where**/ ");

    for (int i = 0; i < searchTerms.Length; i++)
    {
        var args = new Dictionary<string, object>();
        var termId = string.Format("term{0}", i.ToString());
        args.Add(termId, "%" + searchTerms[i] + "%");
        builder.OrWhere("value LIKE @" + termId, args);
    }
...
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.