2015-01-21 3 views
0

Я делаю это в LINQ TO SQL:LINQ к SQL: 2, где не работает

var query = Database.ExtendedUsers.Select(x => x).Where(x => x.Acolumn >= 4); 

, который генерирует правильный синтаксис SQL (с где п). Если добавить 2-ое где, игнорируется:

var query = Database.ExtendedUsers.Select(x => x).Where(x => x.Acolumn >= 4); 
query.Where(x => x.AnotherColumn.Equals(2)); 

Второй, где положение не добавляется в запрос SQL. Что я делаю неправильно?

В принципе, я хочу, чтобы динамически добавлять где

query.Where(...); 
query.Where(...); 
query.Where(...); 
query.ToList(); /: result 

ответ

5

Проблема заключается в том, что Where возвращает новый IQueryable реализации (с добавлением соответствующих узлов в дереве выражений, которые используются для генерации SQL). Таким образом, в основном, вам просто нужно присвоить результат обратно в переменную query:

query = query.Where(x => x.AnotherColumn.Equals(2)); 

Редактора: пожалуйста, не изменить мой пост и добавить код, который я не выложили (добавить комментарий вместо этого). OP хочет использовать динамически (на основе условий). Пример:

var query = Context.MyTable.Where(tbl => tbl.Col > 4); 
if (someConditionThatCannotBeEvalutedInLinqToSql) 
{ 
    query = query.Where(2)tabl => table.Col2 == 5); 
} 

Так, Where(x => x.Acolumn >= 4 && x.AnotherColumn.Equals(2)) не всегда решение, и я не считаю, что это то, что нужно ОП.

+0

Это работает, но очень странно: если я делаю это в функции, это не сработает. У меня: var query = Database.Users.Select (x => x); myFunction (запрос); , а myFunction затем добавляет предложения where. это не работает. Есть идеи? – PoeHaH

+1

@PoeHaH ваша функция 'myFunction' должна также возвращать запрос. Затем: 'query = myFunction (query)'. –

+0

Я чувствую себя глупо ^^ – PoeHaH

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