Как динамическая библиотека (System.Linq.Dynamic) поддерживает LIKE Operator? - PullRequest
10 голосов
/ 05 января 2011

Может ли кто-нибудь сказать мне, как я могу управлять оператором LIKE, используя Microsoft Dynamic Expression API?

Мне нужно добавить более одного выражения Like в мою динамическую , где запрос

/*
var query =
db.Customers.
Where("CityName Like @0 or CityName Like @1", "London", "USA")
*/
var query =
db.Customers.
Where("CityName Like @0 or CityName Like @1%", "London", "USA")

спасибо, куча

Ответы [ 6 ]

19 голосов
/ 05 января 2011

Попробуйте использовать просто «CityName.Contains (@ 1)», это преобразует в правильную лямбду, так как это вызов метода для доступного типа.

что-то вроде:

var query =
db.Customers.
Where("CityName.Contains(@0) or CityName.Contains(@1)", "London", "USA")

Только что протестировал его с примером приложения, которое поставляется с динамической библиотекой, и он генерирует оператор LIKE

3 голосов
/ 24 октября 2012

Это позаботится об использовании «Like» в целочисленных полях ...

.Where (searchField + ".ToString (). Contains (@ 0)", searchString);

3 голосов
/ 05 января 2011

Вы можете использовать .StartsWith(), .EndsWith() и .Contains(), которые будут генерировать LIKE SQL с конечными, ведущими и окружающими подстановочными знаками соответственно. Не знаю, как сгенерировать оператор со встроенным подстановочным знаком, хотя.

3 голосов
/ 05 января 2011

Просто добавьте еще пункты where

var query = db.Customers.Where(c=>c.CityName.contains("London"));
query = query.Where(c=>c.CityName.contains("USA"));
query = query.Where(c=>c.CityName.contains("Johannesburg"));

, но приведенный выше запрос создаст его:

выберите * из Customer, где CityName, например, "london" и CityName, например, "США" и т. Д. *

, который вы хотите

выбрать * из Customer, где CityName - "london" или CityName - как "США "и т. Д. *

Чтобы использовать Dynamic Created или операторы, вы можете использовать Предикатный строитель Там действительно много функций, которые вы можете использовать ...

http://www.albahari.com/nutshell/predicatebuilder.aspx

var predicate = PredicateBuilder.False<Customer>();
predicate = predicate.Or(c=>c.CityName.Contains("London"));
predicate = predicate.Or(c=>c.CityName.Contains("USA"));
predicate = predicate.Or(c=>c.CityName.Contains("Johannesburg"));
2 голосов
/ 18 марта 2011

@ Хайме это то, что мне нужно, спасибо.

var query = db.Customers. Где («CityName.Contains (@ 0) или CityName.Contains (@ 1)», «Лондон», «США»)

0 голосов
/ 05 января 2011

вы можете попробовать это.

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
            var query = db.Customers.Where(c => keyword.Contains(c.CityName));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...