2017-06-19 39 views
-10

假設我有幾個用戶Username列值遵循一個用戶表:在我的LINQ查詢LINQ。具體如何具有IEnumerable結果?

Ortund 
Richard 
Happy McHappyFace 
Flapjack 
Harvey 
Tabitha 
Asha 

如果我查詢用戶。載有()根據用戶輸入「快樂」

var users = db.Users.Where(x => x.Username.Contains("Happy")).ToList(); 

是了IEnumerable將返回其「哈」的名稱(理查德,快樂McHappyFace,哈維,塔比瑟阿莎)每個用戶記錄,例如還是會僅返回「快樂McHappyFace」用戶?

+4

你爲什麼不試試呢?擾流板:它不會:-) – derape

+3

如果您要求「開心」,爲什麼它會返回包含「哈」的所有用戶? –

+1

自標準使用「快樂」以來,只返回1個結果。但是如果你使用「Ha」作爲標準,那麼有5個結果。 –

回答

2

爲什麼它會返回任何匹配Ha?您特別要求名稱包含Happy(甚至是大寫)的用戶,因此您只能在此處獲得一個結果。

+0

我想了解結果具體如何。無論是使用所有指定的確切字符串還是更像SQL LIKE查詢,都會返回與指定值相匹配的部分。此外,不要粗魯或任何事情,但我不認爲在你的答案中提出一個問題是嚴格意義上的,這種情況在這裏可以算作一個高質量的答案。 – Ortund

+0

@Ortund'SELECT * FROM Users Where用戶名LIKE'%Happy%''不會返回'Harvey' – fubo

+2

@Ortund當然是。在做零實驗或調查之後,您使用SO作爲基於人體的REPL,您提出了一個問題。你做了一個不正確的假設,問你爲什麼做出這個假設是完全正確的。 – Rob

0

documentation from String.Contains說:

返回指示是否該字符串中出現的特定字符串的值。

所以整個匹配字符串(Happy)必須匹配輸入字符串(Happy McHappyFace)的全部或一部分。它只會匹配Happy,而不是HHa

它會翻譯成where username like '%Happy%',它只會匹配Happy McHappyFace

有一個細微差別,但(但不是在這種情況下):LINQ有一個Contains方法(特別Enumerable.Contains)是可能匹配簽名(這將匹配的字符枚舉,其中string恰好是)。由於它是一種擴展方法,屬於該類的方法將首先匹配。

+0

我認爲這是linq-to-sql,所以這不是真的'String.Contains'。我剛剛刪除了類似的評論。 – Kobi

+1

將'String.Contains'轉換爲LINQ-to-SQL並不意味着它的行爲會有所不同。在我看來,分析仍然成立,儘管在調用數據庫時會有不同的實現。 –

+0

我不明白你說的@JanesAbouChleih –

相關問題