我有下面的代碼使用包含字符串列表?
var project = db.Projects.FirstOrDefault(x => projectIds.Contains(x.ProjectId));
如果projectIds
是List<string>
包含 「1234567」,並x.ProjectId
是「1234」,它將返回項目ProjectId
是。
如何獲得正確的項目如果其'ProjectId
是「1234567」?
感謝您的支持!
我有下面的代碼使用包含字符串列表?
var project = db.Projects.FirstOrDefault(x => projectIds.Contains(x.ProjectId));
如果projectIds
是List<string>
包含 「1234567」,並x.ProjectId
是「1234」,它將返回項目ProjectId
是。
如何獲得正確的項目如果其'ProjectId
是「1234567」?
感謝您的支持!
Contains
居然會在它的子,你需要在這裏是完全匹配,因此您可以嘗試使用此操作==
像:
var project = db.Projects.FirstOrDefault(x => projectIds.Any(id=> id ==x.ProjectId))
現在,這將確保整個字符串值中與之相匹配。
包含像通配符一樣的SQL,以獲得您需要使用的確切結果。任何擴展名而不是包含。請看這個例子來理解。
string[] x = { "abcd", "abc" };
string[] y = { "abcd", "abc", "abcde" };
var result= x.FirstOrDefault(a => y.Any(b => b == a));
result=abcd
回答
var result = db.Projects.FirstOrDefault(x => projectIds.Any(p=> p==x.ProjectId))
「包含像通配符一樣工作的SQL」 - 哪些「包含」? 'string.Contains'或'List
我不會在未來使用
var project = db.Projects.FirstOrDefault(x => projectIds.Any(id=> id ==x.ProjectId))
string.Equals是有原因的取得,
var project = db.Projects.FirstOrDefault(x => projectIds.Any(id=> id.Equals(x.ProjectId))
然後你可以包括它所帶來的所有重寫,比如忽略大小寫和文化。在你的情況下,文化可能是值得的。例如,如果韓文窗口正在運行您的程序。
在第一種情況下,您應該問自己,爲什麼是nvarchar類型的項目ID?! –
你確定你的代碼不工作嗎?你調用一個List的Contains方法而不是一個字符串,所以它應該檢查列表是否包含完全匹配! – ssimeonov
如果你不使用LINQ但是普通的舊版本會發生什麼? – Fildor