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 has
ProjectId
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一样的通配符的工作”-其中
包含
<代码>字符串。包含
列表。包含
或?