Я нашел это объяснение и решение для использования Dapper для поиска поля VARCHAR
, используя string
в качестве ввода:
Query<Thing>("select * from Thing where Name = @Name", new {Name =
new DbString { Value = "abcde", IsFixedLength = true, Length = 10, IsAnsi = true });
Источник: Даппер и вархары
Но есть ли способ приспособить это для преобразования DbString
для каждого элемента в списке (используя предложение IN)?
Запрос, который я пытаюсь выполнить, выглядит следующим образом:
Query<IndexRec>("SELECT * FROM T_INDEX WHERE CallId IN @callIds",
new { callIds = model.LogEntries.Select(x => x.Id) });
К сожалению, этот запрос выполняется медленно, потому что:
model.LogEntries
содержит около 300 предметов.
- T_INDEX.CallId - это поле
VARCHAR(30)
.
- Как я понимаю, Dapper использует
NVarchar
со строками в предложении WHERE
по умолчанию.
- Это вызывает неявное преобразование каждой строки в моей таблице в SQL, что значительно замедляет запрос.
Как я могу сказать Dapper использовать строки ANSI в моем предложении IN
для этого запроса?