2010-03-16 2 views
30

Файл справки, который поставляется с Dynamic Linq в CSharpSamples.zip, не показывает никаких примеров использования содержит или как.Как использовать «содержит» или «как» в динамическом запросе linq?

Существуют ли какие-либо простые способы решения этой проблемы? то есть (col like @col) не работает.

+0

Обратите внимание на всех, с которыми я обсуждаю DYNAMIC LINQ, которые поставляются с Visual Studio в файле примеров. В этой версии я могу определить, где запрос, используя строку «mycol = @mycol». Я знаю простые случаи. –

+0

То, что я действительно хотел бы сделать, это вставить строку «Like» вместо «=» в моей строке и использовать Dynamic Linq для ее анализа. Но я займусь работой. Я думаю, причина, по которой он не был добавлен, заключается в том, что они построили свой парсер в System.Linq.Expressions, который не имеет этого метода. –

+0

Чтобы было ясно, что я могу сделать это "UserName = @ 0, Contact.FirstName = @ 1" Но не этот «UserName как @ 0, Contact.FirstName как @ 1" Где эти строки, и используя синтаксис динамического LINQ: dc.table.where (MyString, массив) –

ответ

56

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

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

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

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

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

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

+1

Как я могу сделать это на обнуляемого колонке – Thea

+8

@Teddy .где (? "MyColumn ! = null && MyColumn.Contains (@ 0) ", myArray) –

+0

Как вы преобразовываете Grid' FilterExpression' в этот синтаксис? Существуют некоторые библиотеки NuGet Dynamic LINQ, включая поддержку .NET 4.0 ... знаем ли мы, что добавили поддержку конверсии из LIKE в Contains (или другие)? – PeterX

4

На самом деле, есть прямая поддержка для оператора, как в 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 и содержит для большинства приложений.

1

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

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

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

4

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

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

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

Смежные вопросы