2015-04-14 115 views
0

我想要做這樣的事情:動態過濾器4

var list = db.Respaldoes.Where(x => x.type == "Backup"); 

if (condicion1) 
    list.Where(x => x.entity == "GIELCJLT03"); 

if (condicion2) 
    list.Where(x => x.activity_type == "0"); 

我不知道這樣的事情是可能的,我得到的名單,但過濾器永遠不會應用。

+0

您應該提供更多信息。你想做什麼(英文,而不是代碼)?當你運行這段代碼時會發生什麼?你有錯誤嗎? – Theresa

回答

1

你可以嘗試這樣的事:

var list = db.Respaldoes.Where(x => x.type == "Backup"); 

if (condicion1) 
    list = list.Where(x => x.entity == "GIELCJLT03"); 

if (condicion2) 
    list = list.Where(x => x.activity_type == "0"); 

最初的列表時Where子句,x => x.type == "Backup",將被執行,它會給你你指的是最初的名單。然後,如果condicion1爲真,則您將進行第二次調整,並將結果分配給列表。你再次執行了。只有當列表被請求被另一段代碼使用時,它纔會被執行 - 儘管名字執行了。第二屆會議也是如此。

+0

非常感謝你,這是我需要的。 –

+0

歡迎你。我很高興我的幫助。 – Christos

1

Where返回IEnumerable<T>,它延遲執行,直到稍後的操作強制查詢被解析。如果你想解決你的查詢,請立即用ToList()執行。

此外,你實際上沒有對你的過濾列表做任何事情。通過將已過濾列表重新分配給原始列表對象,它將使用過濾器更新集合,刪除與謂詞不匹配的對象。

var list = db.Respaldoes.Where(x => x.type == "Backup"); 

if (condicion1) 
    list = list.Where(x => x.entity == "GIELCJLT03").ToList(); 

if (condicion2) 
    list = list.Where(x => x.activity_type == "0").ToList();