C# 在字符串列表中使用Contains?
我有下面的代码C# 在字符串列表中使用Contains?,c#,linq,C#,Linq,我有下面的代码 var project = db.Projects.FirstOrDefault(x => projectIds.Contains(x.ProjectId)); 如果ProjectId是一个包含“1234567”的列表,并且x.ProjectId是“1234”,它将返回project hasProjectId是1234 如果项目的'ProjectId是“1234567”,我如何准确地获取项目 谢谢你的支持 包含实际上在其中查找子字符串,您需要在此处找到完全匹配,以便您可以
var project = db.Projects.FirstOrDefault(x => projectIds.Contains(x.ProjectId));
如果ProjectId
是一个包含“1234567”的列表,并且x.ProjectId
是“1234”,它将返回project hasProjectId
是1234
如果项目的'ProjectId
是“1234567”,我如何准确地获取项目
谢谢你的支持 包含
实际上在其中查找子字符串,您需要在此处找到完全匹配,以便您可以尝试在此处使用=
运算符,如:
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))
我不会用
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))
然后在将来,您可以包括它附带的所有覆盖,例如忽略大小写和区域性。在你的情况下,文化可能是值得的。例如,如果韩国windows正在运行您的程序。在第一种情况下,您应该问问自己,为什么项目ID是nvarchar类型?!您确定您的代码不起作用吗?您调用的Contains方法不是字符串列表,因此它应该检查列表是否包含精确匹配!如果不使用LINQ,而是使用普通的旧版本,会发生什么?请稍等。项目中的ID是什么?它是否也包含“1234”?如果您想要一个具有一个特定id的项目,则应仅使用该id进行搜索。不是一组ID。如果ProjectId
是一个列表
,而x.ProjectId
是字符串
,则包含
和您建议的内容之间绝对没有区别。List.Contains不查找子字符串:List.Contains的工作原理与indexOf类似,只需在字符串中查找匹配项,如果找到,则返回bool。。。所以说它寻找一个子字符串是正确的,尽管它也可以是一个完整的字符串,让我试着用小提琴演奏并发布example@EhsanSajjad的确这就是为什么问题不清楚,需要OP进一步澄清/mcve。为什么要否决投票?我错了吗-我喜欢没有解释的否决票。我想这是因为这个答案没有回答这个问题。“包含像SQL一样的通配符的工作”-其中包含<代码>字符串。包含
或列表。包含
或?