C# LinQ哪里有string.Contains或string.IndexOf?
我需要写一些能给出相同结果的东西:C# LinQ哪里有string.Contains或string.IndexOf?,c#,.net,linq,C#,.net,Linq,我需要写一些能给出相同结果的东西: var result = collection.Where( o => o.Name.IndexOf( "some_string2" ) != -1 || o.Name.IndexOf( "some_string_2" ) != -1 || o.Name.IndexOf( "some_string3" ) != -1 ) 其中要检查的字符串的数量和值(一些字符串1、2和3)未知(来自DB),因此更一般的 我尝试了以下方法,但失败了 var string
var result = collection.Where( o => o.Name.IndexOf( "some_string2" ) != -1 || o.Name.IndexOf( "some_string_2" ) != -1 || o.Name.IndexOf( "some_string3" ) != -1 )
其中要检查的字符串的数量和值(一些字符串1、2和3)未知(来自DB),因此更一般的
我尝试了以下方法,但失败了
var stringsToCheck = someCommaSeparatedStrings.ToLower().Split( ',' ).ToList();
var result = collection.Where( o => stringsToCheck.Contains( o.ToLower() ) );
换句话说,我需要从一个名称包含一些特定字符串的集合中检索所有对象
var result = collection.Where(item => stringsToCheck.Any(stringToCheck =>
item.Name.Contains(stringToCheck)));
用英语阅读这是:给我集合中的所有项,其中,要检查的所有字符串中,有一个是集合中字符串的子字符串。您正在检查集合元素
o.ToLower()
我想您必须检查它的名称o.name.ToLower()
如果您想检查o.Name
是否包含字符串中的字符串检查
,我建议使用PredicateBuilder
构建查询
var predicate = PredicateBuilder.False<TypeOfYourObject>();
var stringsToCheck = someCommaSeparatedStrings.ToLower().Split( ',' ).ToList();
foreach(var str in stringsToCheck)
{
var tmp = str;
predicate = predicate.Or(o=> o.Name.IndexOf(tmp) != -1);
}
resultQuery = collection.Where(predicate);
var predicate=PredicateBuilder.False();
var stringsToCheck=someCommaSeparatedStrings.ToLower().Split(',').ToList();
foreach(stringsToCheck中的var str)
{
var-tmp=str;
谓词=谓词.Or(o=>o.Name.IndexOf(tmp)!=-1);
}
resultQuery=collection.Where(谓词);
如果要测试o.Name
是否包含stringToCheck
,则:
var result = collection.Where( o => stringsToCheck.Any(a => o.Name.Contains(a)));
如果您只需要测试是否相等,则:
var result = collection.Where( o => stringsToCheck.Contains(o.Name));
注意:如果您需要应用大小写规范化,则应相应地应用ToLower()
。这是EF还是LINQ to objects?@flq他使用术语collection
,因此可能两者都没有。好吧,我问一下,因为如果它是LINQ to objects,它应该工作……为什么失败(错误消息是什么)?我假设您使用的是LINQ to SQL。@Seb Johnathan实际上是正确的。你应该更恰当地解释什么不起作用以及为什么不起作用。在我的例子中,我之所以能够回答,是因为我忽略了你的尝试,看了看你提出的问题,然后从头开始解决了这个问题。如果我只看到了您的第二个实现,而没有看到完整的需求,我就不知道有什么问题,也不知道如何修复它。请注意,任何时候您看到Count()>0
铃声都应该响起,您应该改为使用any()
。首先,Any
在语义上表示您的意思,其次,它可以短路(只要找到一个匹配项就结束),而不需要计算整个查询。@Servy,是的,很好。尤其是第一次“真实”评估的即时回报。相应地更新了我的帖子-谢谢。谢谢,这正是我想要的:)声明不起作用。给出错误消息Local sequence不能用于查询运算符的LINQ to SQL实现中,Contains运算符除外。@这是关于查询内存中集合的问题,而不是LINQ to SQL查询。