2016-08-18 3 views
1

я надеюсь, что кто-то может HelpMe им работать в C# с каркасом объекта 6Как фильтровать несколько слов C# Entity Framework

мне нужно искать в поле «Описание» моей таблицы «ПРОДУКТЫ» значение текстового поля , но текст по отдельному в любом порядке, я могу объяснить лучше с моим кодом:

string[] palabras = textBox1.Text.Split(' '); 
string palabraABuscar = "";      
for (int i = 0; i <= palabras.Length - 1; i++) 
{ 
palabraABuscar = palabras[i]; 
query = query.Where(a => a.DESCRIPCION.Contains(palabraABuscar)); 
} 

идея, если пользователь вводит «lala1 lala2» программный фильтр всех продуктов, содержащий, что два слова, пример:

Программа должна показать продукты «CAMERA lala2 с lala1» и «lala1 BOX lala2» программа не должна показывать «Компьютер lala1» либо «душа lala2»

С моим кодом программа только фильтровать продукты по последнему слову («Лала») , может заменить первый где, я использую для, потому что я такт не знаю, сколько

+0

Что вам может понадобиться для полнотекстового поиска, который не поддерживается напрямую EF. Вам придётся прибегнуть к обходному пути, чтобы заставить его работать. –

+0

IMO, ваш текущий код должен работать должным образом. –

ответ

3

Ваш Код currenct должен работать как ожидалось, метод beacuse Where добавляет каждый запрос с and. Или вы можете попробовать другой вариант (@Ghasan также заявил в комментарии):

string[] palabras = textBox1.Text.Split(' '); 
query = query.Where(a => palabras.All(p => a.DESCRIPCION.Contains(p))); 

Если ни текущий код, ни это работает для вас, а затем проверить, если вы правильно разделить данные и быть уверенным, что query не является правильным, пока вы превышать код. Дополнительно вы можете проверить сгенерированный SQL-запрос примерно:

context.Database.Log = Console.WriteLine; // Or something similar. 
+0

ваш ответ memme я могу проверить сгенерированный SQL и подтвердил, что мой код должен работать. , но я все еще не могу решить свою проблему, я пытаюсь с моим кодом d получить этот код sql: {SELECT'Project1'.'IDPRODUCTO', 'Project1'.' DESCRIPCION'FROM 'producto' AS' Project1' WHERE ((1 = 'Project1'.'ESTADO') AND (' Project1' .'DESCRIPCION' LIKE @ p__linq__0)) И ('Project1'.'DESCRIPCION' LIKE @ p__linq__1) ORDER BY' Project1'.'IDPRODUCTO' ASC} я не вижу ошибку:/ моя программа по-прежнему показывают продукты например, фильтрация с использованием только последнего слова, введенного пользователем –

+0

. Тогда проблема не в вашем коде, проверьте параметры 'p__linq__0' и' p__linq__1' и попробуйте выполнить этот запрос в databas @Alexisenp –

+0

знаете ли вы, почему сгенерированный код sql показывает мне что параметры вместо значений? и как увидеть значения этих параметров?: S –

1

Просто замените

query = query.Where(a => a.DESCRIPCION.Contains(palabraABuscar)); 

с

query = query.Where(a => palabraABuscar.All(x => a.DESCRIPCION.Contains(x)); 
+0

Извините, ребята, когда я использую этот код, я получаю ошибку (я думаю, должен быть palabras как @AdilMammadov): InnerException \t {«У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее вашей версии сервера MariaDB для правильного синтаксис для использования около '% s%) ИЛИ (CASE WHEN ('Extent1' .'DESCRIPCION' LIKE% s%) THEN (1) КОГДА (' Extent1'.' в строке 16 "} \t System.Exception {MySql.Data .MySqlClient.MySqlException} Я не знаю, почему: /, im все еще triying, чтобы выяснить, почему –

+0

выглядит как ошибка MariaDB для меня. Можете ли вы попытаться запустить 'query.ToList(). Где ('? Если это работает, ошибка должна быть в рамках, которая переводит linq в sql – fubo

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