Как использовать "содержит" или "как" в динамическом запросе linq?

Файл справки, который поставляется с Dynamic Linq в файле CSharpSamples.zip, не показывает никаких примеров использования содержимого или подобного.

Существуют ли какие-либо простые способы обхода? то есть (col like @col) не работает.

Ответ 1

Вот ответ! Динамический Linq поддерживает. оператор,

Согласно документам:

"Поле экземпляра или свойство экземпляра доступ. Любое публичное поле или собственность могут быть доступны".

Таким образом, этот синтаксис можно использовать

.Where("MyColumn.Contains(@0)", myArray)

Спасибо за все предложения! И спасибо мне за то, что вы нашли решение.

Ответ 2

На самом деле существует прямая поддержка подобного оператора в Linq2Sql:

db.MyTable.Where(a => SqlMethods.Like(a.Name, "%"+searchTerm+"%"))

Смотрите здесь:

http://msdn.microsoft.com/en-us/library/system.data.linq.sqlclient.sqlmethods_members.aspx

... но я предпочитаю использовать startsWith, endsWith и содержит для большинства приложений.

Ответ 3

Для меня решение было externalIt.

   class User { public string Name { get; set; } }
   ...
   IQueryable<User> query = db.Users;
   ...
   query = query.Where("@0.Contains(outerIt.Name)", list);

Обратите внимание, что outerIt является своего рода ключевым словом , встроенным в библиотеку (вам не нужно его изменять, так как вы можете прочитать его в ответе здесь). Вы можете получить доступ к свойству своего типа запроса.

Ответ 4

Обратите внимание, что решение предоставлено только для простых случаев: если вы хотите использовать параметры для источника вызова Содержит и/или если вы хотите использовать текущую запрошенную коллекцию, которая будет использоваться как параметр для вызова Содержит, то предоставленное решение не будет работать.

В следующем блоге вы можете найти решение для правильного расширения библиотеки Dynamic Linq и добавить поддержку для Contains extension:

http://blog.walteralmeida.com/2010/05/advanced-linq-dynamic-linq-library-add-support-for-contains-extension-.html