2017-02-13 134 views
-2

我有一個名爲results的模型列表。我需要從包含這個特定字符串的結果列表中獲取這些值。要查找列表是否包含特定字符串

List<Search> results = new List<Search>(); 

results = db.Users.Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 

results = results.Where(w => (model.Name == null || w.Name.Contains(model.Name))).ToList(); 

雖然第一個結果查詢返回5000行,第二個返回0。我試圖在第二個查詢做的是,如果名稱爲null,或者名稱包含字符串的一部分,其添加到結果列表。 我錯過了什麼嗎?

我做檢查了幾個,基本上要我做同樣喜歡Check if a string within a list contains a specific string with Linq

我已經檢查了model.Name值,並將其正確顯示出來的鏈接。如果沒有搜索字符串,當Model.Name = null,我得到所有記錄

+4

這是不好的做法,將所有行取入內存然後過濾。你的SQL服務器應該已經做好了這個工作來減少CPU /網絡負載,開銷和RAM的使用。 – fubo

+1

我們如何知道結果實際上包含'model.Name'?那個集合在哪裏?我們不能確定......另外,你沒有處理套管問題。 「亞倫」和「亞倫」不一樣。 –

+0

誰是模型領域,搜索變量? – octavioccl

回答

1

請考慮以下語句:Name is null or if the Name contains part of a string我希望您需要檢查db.Users中的項目爲null和Contains。還有一件事,我必須在這裏添加 - 如果x.Name爲空,則以下.Contains將增加NullReferanceException因此,您也必須考慮這一點。現在看看下面的查詢:

List<Search> results = db.Users.Where(x=> x.Name==null || (x.Name !=null && x.Name.Contains(model.Name))) 
           .Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 
+0

Contains('foo')'被轉換成'Like'%foo因爲'Like'已經不區分大小寫 – fubo

+0

雖然我知道在兩個查詢中可能會出現性能問題,但我的查詢與您的查詢有什麼不同? – TheFallenOne

+0

@The_Outsider'ToList()'將結果寫入您的內存。你在你的應用程序中執行它,不幸的是它在sql查詢 – fubo

相關問題