2016-08-09 73 views
0

我有一個findAll功能得到所有記錄在數據庫中的表Contacts,然後他們根據其值在搜索表單中選擇的用戶過濾器。結果在一次過濾一個過濾器。C#的IQueryable不工作

IQueryable<Contact> resultContacts = db.Contacts; 

if(request['Name'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Name.Contains(Name)); 
} 

if(request['Phone'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Phone.Equals(Phone)); 
} 

if(request['Company'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Company.Contains(Company)); 
} 

return resultContacts; 

問題是,現在這是行不通的。每個if內部的resultContacts.Where重置爲原來的resultContacts,因爲某些原因我在第一行上。例如:當我調試,應用更改,如果(我結束了10出的100條記錄)第一里面,但是當我進入第二個如果,代碼查詢原resultContacts,而不是10我作爲一個第一個結果爲if

這工作正常,爲期一年,直到2周前。我不知道在我的代碼中是否有更改...如果我添加了引用或其他可以進行此更改的內容。

任何想法爲什麼? 謝謝!

+0

您是不是想要在每個查詢中使用請求對象?像'。載有(要求[ '名稱']));' – Niklas

+1

我很驚訝,C#允許這種語法'要求[ '電話']'單引號懷抱'char'不'string' – Imad

+0

另外'請求[ '名稱' ]'與'Name'不是一回事。 「電話」和「公司」同上。不要把代碼看起來像你所擁有的。發佈*真實*代碼。 – hvd

回答

-2
var results = db.Contacts 
    .Where(a => request["Company"] == String.Empty || a.Company.Contains(Company)) 
    .And(a => request["Phone"] == String.Empty || a.Phone.Equals(Phone)) 
    .And(a => request["Name"] == String.Empty || a.Name.Contains(Name))); 
+2

你可以將所有3個條件統一到Where子句中嗎?這似乎工作,只是想確定我明白了。 – MichaelThePotato

+0

是的,我想你可以。 – Matt

+1

給你的答案一些解釋,而不僅僅是一些代碼。我不明白OP代碼和這個代碼之間的行爲差​​異。對我來說,他們應該以同樣的方式工作... – 3615