Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LinQ哪里有string.Contains或string.IndexOf?_C#_.net_Linq - Fatal编程技术网

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查询。