Как написать оператор, который генерирует оператор 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;
Другие вопросы по тегам