Grouping reviews by UserId
There is actaully another solution that utilizes the Except extension. This means you first select all reviews with at least two users but remove those where the restaurant does not have at least three reviews.

This requires to write a new IEqualityComparer that I find is an overkill for this but on the other hand the Except clearly tells what kind of results we don't want to have. Anyway, the alternative solution:

reviews
    .GroupBy(r =&gt; r.UserId)
    .Where(g =&gt; g.Count() &gt; 1)
    .Except(
        reviews
            .GroupBy(r =&gt; r.RestaurantId)
            .Where(g =&gt; g.Count() &lt; 3),
        new ReviewComparer()
    );


where

class ReviewComparer : IEqualityComparer&lt;IGrouping&lt;Guid, Review&gt;&gt;
{
    public bool Equals(IGrouping&lt;Guid, Review&gt; left, IGrouping&lt;Guid, Review&gt; right) 
    {
        // left - user-group
        // right - restaurant-group
        // exclude the user group 
        // if it contains any restaurant-id of the excluded restaurant-ids
        return left.Any(x =&gt; right.Any(y =&gt; y.Id == x.Id));
    }

    public int GetHashCode(IGrouping&lt;Guid, Review&gt; reviews)
    {
        return 0; // treat all groups equally
    }
}