2010-10-06 2 views
1

Например иметь эту таблицу:Как искать LINQ со многими параметрами в одном столбце?

Name | BodyType 
---------------- 
John | 1 
Ted | 2 
Daniel| 3 
George| 4 

I мое приложение я проверить "1" "2" и "3" флажок. И я должен найти 3 строки (Джон, Тед, Даниэль) и НЕ Джордж. Как я могу получить этот запрос в LINQ? (Не использовать where p.BodyType!=4) Используйте логику ИЛИ

var all = dataContext.Users; 
foreach (searchParameter in search) 
    ...? 

ответ

4

Поместите необходимые идентификаторы в List<int>, а затем Contains:

var bodyTypes = GetBodyTypesFromSearchParameters(); 
var query = dataContext.Users.Where(user => bodyTypes.Contains(user.BodyType)); 
+0

damnit вы были в первую очередь :) – Stefanvds

+0

И если у меня есть языки (в одной колонке) Языки: 1,2,3,4; 1,2,3. и мне нужно 1,2,3, а не 4 (varchar) – Dmitriy

+0

@ Dmitriy: Если у вас есть один столбец с указанием нескольких значений, я бы сказал, что вам нужно пересмотреть дизайн своей базы данных. Вместо этого применяйте отношения «многие ко многим» с таблицей сопоставления. Использование списка, разделенного запятыми, сделает вещи неудобными. –

1

По сути вы должны получить свои параметры в перечислимый контейнер, а затем использовать Метод LINQ Contains при итерировании через таблицу с помощью метода Where:

var parameters = new[] { 1, 2, 3}; 
    var list = new[] { new { Name = "John", BodyType = 1 }, new { Name = "Ted", BodyType = 2 }, new { Name = "Daniel", BodyType = 3 }, new { Name = "George", BodyType = 4 } }; 
    var result = list.Where(c => parameters.Contains(c.BodyType)); 
Смежные вопросы