2012-04-30 4 views
0

У меня возникла проблема с запросом LINQ.LINQ: Как проверить CONTAINS с несколькими динамическими значениями ввода

У меня есть несколько значений ввода, которые хранятся в переменной List> <.

Мне нужно сформировать запрос LINQ, в котором есть предложение where, которое проверяет соответствующий столбец с ключевым словом CONTAINS. Проблема, с которой я сталкиваюсь, заключается в том, что строка < string может содержать любое количество значений в ней.

Так что я хочу знать, как я могу сформировать запрос, который может читать входные значения из объекта коллекции. и отобразить результат.

Любое предложение будет оценено.

Заранее спасибо.

+0

Я не могу понять вопрос правильно, вы имеете в виду что-то вроде Select * from t где col in ('1', '2'); , или не могли бы вы отправить какой-то код того, что вы пробовали до сих пор и что хотите? – Habib

+0

Вы хотите сказать, что вам нужно увидеть, 1. если столбец содержит значение (в этом случае у вас есть только один столбец для проверки или несколько) или 2. если таблица содержит столбец? Действительно ли ваш список содержит список имен столбцов или ожидаемых значений в столбце (или в одном из известных наборов столбцов)? –

ответ

0

Ваш вопрос непонятен. Предположим, что у вас есть три значения X, Y и Z. Если вы хотите получить результаты, когда столбец X или Y или Z, тогда ответ habib-osu сделает это.

Если вы ищете для всех записей, где конкретный столбец содержит X, Y и Z, то должно работать

List<string> options = new List<string>(); 
options.Add("X"); 
options.Add("Y"); 
options.Add("Z"); 

var query = (from r in dc.Table select r); 
foreach(var option in options) 
    query = (from r in query where r.Column.Contains(option) select r); 

var list = query.ToList(); 

Это произведет один SQL запрос, подобный следующему

select * from Table where Column like '%X%' and column like '%Y%' and column like '%Z%'  
+0

спасибо за предложение sgmoore, но он не удовлетворяет моим требованиям. Я боюсь, но это, кажется, частично правильное предложение. Используя этот метод, если моя таблица «MyTable» имеет значения в «MyColumn» как «John», «Joseph», «Philip» и мой список имеет элемент со значением как «ph», тогда он не получит мне никаких записей. Он выполняет поиск всего значения в элементе списка ! – shakti

+0

Вы должны получить две записи, например, Иосиф и Филипп. Какой sql генерируется вашим запросом? – sgmoore

+0

дает пустой IEnumerable <>!. Набор записей пуст. – shakti

2

Linq метод расширения:

public static bool ContainsAny<T>(this IEnumerable<T> Collection, IEnumerable<T> Values) 
{ 
    return Collection.Any(x=> Values.Contains(x)); 
} 

Затем вы можете использовать как:

List<string> List1 = getStringList1(); 
List<string> List2 = getStringList2(); 

bool List2ItemsInList1 = List1.ContainsAny(List2); 
Смежные вопросы