Suppose I have a given object of type IEnumerable<string> which is the return value of method SomeMethod(), and which contains no repeated elements. I would like to be able to “zip” the following lines in a single LINQ query:
IEnumerable<string> someList = SomeMethod();
if (someList.Contains(givenString))
{
return (someList.Where(givenString));
}
else
{
return (someList);
}
Edit: I mistakenly used Single instead of First. Corrected now.
I know I can “zip” this by using the ternary operator, but that’s just not the point. I would just list to be able to achieve this with a single line. Is that possible?
The nature of your desired output requires that you either make two requests for the data, like you are now, or buffer the non-matches to return if no matches are found. The later would be especially useful in cases where actually getting the data is a relatively expensive call (eg: database query or WCF service). The buffering method would look like this:
The laziness of this method is either that of
WhereorToListdepending on if the collection contains a match or not. If it does, you should get execution similar toWhere. If not, you will get roughly the execution of callingToList(with the overhead of all the failed filter checks) and iterating the result.