2015-01-21 68 views
0

我在LINQ to SQL這樣做:的LINQ to SQL:2,其中不工作

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

產生正確的SQL語法(where子句)。 如果我添加在那裏,它被忽略第2個:

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

第二where子句不會添加到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))並不總是解決方案,我不認爲這是什麼OP需求。

+0

這有效,但很奇怪的事情:如果我在一個函數中這樣做,它不起作用。我有:var query = Database.Users.Select(x => x); myFunction(query); 然後myFunction會添加where子句。這不起作用。有任何想法嗎? – PoeHaH 2015-01-21 15:28:24

+1

@PoeHaH你的函數'myFunction'應該返回查詢。然後:'query = myFunction(query)'。 – 2015-01-21 17:00:09

+0

我覺得很蠢^^ – PoeHaH 2015-01-26 12:28:16