string.Join
converts a collection of strings into a single string, separated by one or more of the separator string you specify.
So if
filter.SolutionIds
contains three strings "1", "2", and "3", then
String.Join(",", filter.SolutionIds)
will return a string containing a single string "1,2,3".
And
string.Contains
looks for an exact string match as a subset of the input string - in the example above:
"1,1,2,3,b" will match.
"1,2,3" will match.
"1,1,2,3,b" will not match.
"1,1,2" will not match.
"1" will not match.
"2" will not match.
"3" will not match.
You probably need to decide exactly what you want to find, but if you only want to process ParentContentIds that exist in your Solution IDs, then reverse the check:
filter.SolutionIds.Contains(x.ParentContentIds)
But that's just a guess since we have no idea what your fields contain, or what exactly you are trying to do with them!