Как написать оператор, который генерирует оператор LIKE T-SQL в System.Linq.Dynamic
Я использую System.Linq.Dynamic, и в большинстве случаев он работает отлично. Однако я пытаюсь получить StartsWith
который будет генерировать что-то вроде Description LIKE 'test%'
в T-SQL.
Похоже, что я не могу найти, и документации, как я заметил, недостаточно, какой оператор написать в моем коде для передачи методу Where динамической библиотеки для генерации этого LIKE
заявление.
То, что я уже пробовал, но у меня не получилось:
.Where("Description LIKE \"test%\"");
.Where("Description < \"test%\"");
Но ничто не генерирует LIKE утверждение, которое я ищу.
2 ответа
System.Linq.Dynamic
переводит ваш текст в регулярные выражения LINQ, и там нет понятия "LIKE". Как бы вы написали свой лайк в обычном LINQ? Что-то вроде того:
ctx.Entity.Where(c => c.Description.StartsWith("test"));
Это почти точно соответствует тому, что вы должны делать с динамическим linq:
// @0 is first parameter, which is "test" in this case
ctx.Entity.Where("Description.StartsWith(@0)", "test");
Вы также можете передавать значение inline, хотя я бы рекомендовал всегда использовать параметры, как указано выше
ctx.Entity.Where("Description.StartsWith(\"test\")");
Вы можете заменить StartsWith
с Contains
или же EndsWith
сгенерировать их соответствующие tsql "LIKE" эквиваленты.
Я не использовал эту библиотеку, но у них есть пример, который генерирует LIKE
заявление. Это подходит для вашего использования?
Для потомков вот код:
var q = from c in db.Customers
where SqlMethods.Like(c.CustomerID, "C%")
select c;