複数の検索語に対して動的な 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%