I need to check if a sequence has any items satisfying some condition but at the same time NOT all items satisfying the same condition.
For example, for a sequence of 10
That is likely a fairly optimal solution if the source is a database. This extension method might be better depending on your source (I think, I just threw it together -- likely many many errors, consider it more pseudo code). The benefit here is it only enumerates once and does a short-circuit as soon as it has read enough to determine the outcome:
static bool SomeButNotAll(this IEnumerable source,
Func predicate)
{
using(var iter=source.GetEnumerator())
{
if (iter.MoveNext())
{
bool initialValue=predicate(iter.Current);
while (iter.MoveNext())
if (predicate(iter.Current)!=initialValue)
return true;
}
}
return false; /* All */
}