2017-02-13 3 views
-2

У меня есть список моделей, называемых результатами. Мне нужно получить эти значения из списка результатов, которые содержат эту конкретную строку.Чтобы узнать, содержит ли список определенную строку

List<Search> results = new List<Search>(); 

results = db.Users.Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 

results = results.Where(w => (model.Name == null || w.Name.Contains(model.Name))).ToList(); 

Хотя первый результат запрос возвращает 5000 строк, второй возвращает 0. То, что я пытаюсь сделать во втором запросе, если имя является пустым или если имя содержит часть строки, добавьте его в список результатов. Я что-то упустил?

я проверить несколько ссылок, которые в основном просили меня сделать то же самое, как Check if a string within a list contains a specific string with Linq

Я проверил значение model.Name и он показывает правильно. Также запрос работает, если нет строки поиска, которая есть, когда Model.Name = null, я получаю все записи

+4

Неплохая практика приносить все строки в плунжер и фильтровать впоследствии. Ваш сервер sql должен уже выполнять задание, чтобы снизить нагрузку на процессор, сетевую нагрузку, накладные расходы и использование плунжера. – fubo

+1

Как мы узнаем, что результаты фактически содержат 'model.Name'? Где этот набор? Мы не можем быть уверены ... также, вы не имеете дело с проблемами обсадной колонны. «Аарон» - это не то же самое, что «аарон». –

+0

Кто такое поле 'model', переменная' Search'? – octavioccl

ответ

1

Рассмотрите это заявление: Name is null or if the Name contains part of a string Надеюсь, вам нужно проверить элемент в db.Users для нулевого и Содержит. Еще одна вещь, которую я должен добавить здесь, - если x.Name имеет значение null, то следующие .Contains поднимут NullReferanceException Так что вы должны это учитывать. Теперь зайдите в следующий запрос:

List<Search> results = db.Users.Where(x=> x.Name==null || (x.Name !=null && x.Name.Contains(model.Name))) 
           .Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 
+0

'Contains ('foo')' переводится в 'Like '% foo % ''поэтому не должно быть' ToLower() 'required, потому что' Like' уже нечувствителен к регистру – fubo

+0

Хотя я понимаю, что могут возникнуть проблемы с производительностью, делая это в двух запросах, как мой запрос отличается от вашего? – TheFallenOne

+0

@The_Outsider 'ToList()' записывает результат в ваш ram. Вы делаете это в своем приложении, не повезло, делает это в sql-запросе – fubo