Как использовать Dynamic LINQ (System.Linq.Dynamic) для операции LIKE?

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

Мне нужно добавить более одного выражения 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")

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

Ответ 1

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

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

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

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

Ответ 2

Это позволит оператору LIKE в целочисленных полях:

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

Ответ 3

Просто добавьте дополнительные предложения

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"));

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

выберите * у клиента, где CityName и CityName, например, "Лондон" "США" и т.д.

вы хотите

выберите * у клиента, где CityName как "лондон" или CityName, как "США" и т.д.

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

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"));

Ответ 4

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

Ответ 5

@Jaime вот что мне нужно, спасибо.

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

Ответ 6

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

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
            var query = db.Customers.Where(c => keyword.Contains(c.CityName));

Ответ 7

Я сделал свой собственный С#, как оценщик, и подключил его к динамической библиотеке. Взгляните на мой пост в блоге http://blog.alivate.com.au/?p=382