2009-08-15 3 views
2

Возможно, простой вопрос: я пытаюсь получить результат из таблицы, в которой столбец Name содержит весь массив поисковых терминов. Я создаю запрос и цикл через строки поиска, каждый раз назначая запрос = query.Where (...) ;. Похоже, что используется только последний термин, я полагаю, потому что каждый раз пытаюсь ограничить одно и то же поле. Если я вызываю .ToArray(). AsQueryable() с каждой итерацией, я могу получить поведение кумулятивного ограничения, которое я ищу, но это простой способ сделать это, используя только отложенные операторы?Несколько выражений предложения предложения WHERE в LINQ to SQL

Спасибо!

ответ

6

Если вы делаете что-то вроде:

foreach (int foo in myFooArray) 
{ 
    query = query.where(x => x.foo == foo); 
} 

... то он будет использовать только последний, так как каждый, где критерии будут содержать ссылку на переменную «Foo» цикла.

Если это то, что вы делаете, изменить его на:

foreach (int foo in myFooArray) 
{ 
    int localFoo = foo; 
    query = query.where(x => x.foo == localFoo); 
} 

... и все должно быть хорошо снова.

Если это не то, что происходит, пожалуйста, предоставить образец кода, что вы делаете ...

+0

Хороший улов, должно быть. – Marc

+0

Ах, отлично! Даже не передумал. Хорошая уловка действительно ... – Paul

+0

Это один из тех случаев с нечетным краем, где прямо не видно, что происходит ... :) ... только потому, что код не выполнен «inline», как мы привыкли большинство других C# или VB-кодов ... – KristoferA

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