список поиска, где с и условия - PullRequest
1 голос
/ 10 февраля 2020

У меня есть таблица Project

id|title
___________________
1|water blue 
2|test water blue low test
3|low   blue

У меня есть список Поиск (список поиска является динамическим c и заполняется пользователем любым значением и любой числовой строкой)

string[] search = new string[] { "water", "blue", "low" };

Я хочу написать этот запрос с помощью ef6

select * from project 
where title like '%water%' and title like'%blue%' and title like '%low%'

Я пишу этот код, но возвращаю всю строку (я хочу только строку 2, вода синего цвета)

 var result = (from p in context.project     
               where seartch.Contains(p.title)    
              select p     
               ).ToList();

Пожалуйста, помогите мне

Ответы [ 5 ]

1 голос
/ 10 февраля 2020

Попробуйте что-то вроде этого

var result = search.Where(x=>x.Contains("water") || x.Contains("blue")).ToArray();
Array.ForEach(result, Console.WriteLine);

ОБНОВЛЕНИЕ

var result =  context.project.Where(x=>Array.IndexOf(search, x.Title) > -1);
0 голосов
/ 10 февраля 2020

Вы можете попробовать это. Вы получите только строку 2. Поскольку необходимо учитывать совпадение всех записей в строке поиска.

from p in context.project 
.Where(g => search.All(h => g.Title.Contains(h)));
0 голосов
/ 10 февраля 2020

Ваш текущий запрос неверен. Эквивалент SQL будет

WHERE title IN ('water', 'blue', 'low')

. Правильный запрос может быть построен путем итерации по массиву поисковых терминов и создания термина «для каждого». Термины неявно и обозначены linq:

IQueryable<Project> query = context.project;
foreach (var s in search) {
  query = query.Where(x => x.Title.Contains(s));
}

var result = query.ToList();
0 голосов
/ 10 февраля 2020

По SQL -подобному запросу

 var result = (from p in context.project     
               where (p.title.Contains(search[0])&  p.title.Contains(search[1])&p.title.Contains(search[2])                         
               ).ToList();

По лямбда-экспу

var result= context.project.Where(p=>p.title.Contains(search[0])&p.title.Contains(search[1])&p.title.Contains(search[2])).ToList();
0 голосов
/ 10 февраля 2020

Вы можете достичь этого таким образом

var query = from p in context.project;
foreach(var item in search)
    query.Where(p => p.Title.Contains(item));

var result = query.ToList();  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...