Как использовать "содержит" или "как" в динамическом запросе 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