24

I have a List<string> that has some items like this:

{"Pre Mdd LH", "Post Mdd LH", "Pre Mdd LL", "Post Mdd LL"}

Now I want to perform a condition that checks if an item in the list contains a specific string. something like:

IF list contains an item that contains this_string

To make it simple I want to check in one go if the list at least! contains for example an item that has Mdd LH in it.

I mean something like:

if(myList.Contains(str => str.Contains("Mdd LH))
{
    //Do stuff
}
0

5 Answers 5

83

I think you want Any:

if (myList.Any(str => str.Contains("Mdd LH")))

It's well worth becoming familiar with the LINQ standard query operators; I would usually use those rather than implementation-specific methods (such as List<T>.ConvertAll) unless I was really bothered by the performance of a specific operator. (The implementation-specific methods can sometimes be more efficient by knowing the size of the result etc.)

Sign up to request clarification or add additional context in comments.

8 Comments

How can we make it case insensitive search? Contains doesn't have that overload method.
@Ankur-m: You can use IndexOf instead, passing in a StringComparison. If that's not enough detail, please ask a new question (after searching for existing ones, of course).
I could do it using IndexOf. However I had to use FindIndex instead of Any. I am still looking why Any didn't work. And yes there are similar posts which I couldn't find in my first search. Thank a lot for the help!
@Ankur-m: Well if you're still confused, I suggest you ask a new question - if you don't need the index, then Any really should work.
@ManikArora: Because any string "contains" the empty string. That's more about string.Contains than about Any. See learn.microsoft.com/en-us/dotnet/api/…
|
14

That should be easy enough

if( myList.Any( s => s.Contains(stringToCheck))){
  //do your stuff here
}

Comments

9

Try this:

bool matchFound = myList.Any(s => s.Contains("Mdd LH"));

The Any() will stop searching the moment it finds a match, so is quite efficient for this task.

Comments

7

LINQ Any() would do the job:

bool contains = myList.Any(s => s.Contains(pattern));

Any(), MSDN:

Determines whether any element of a sequence satisfies a condition

Comments

3

If yoou use Contains, you could get false positives. Suppose you have a string that contains such text: "My text data Mdd LH" Using Contains method, this method will return true for call. The approach is use equals operator:

bool exists = myStringList.Any(c=>c == "Mdd LH")

1 Comment

That is exactly what the poster was trying to accomplish, a 'like' in sql, so these would be 'positive positives' I guess, no equals necessary.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.