Tuple/Lookup conundrum
Once you've gotten your code into a ILookup you can just call Item property (which in C# is called with [...]) to get all values with a given key. So the Check can be entirely replaced by using the ILookup like this:

ILookup&lt;int, string&gt; plansLookup = ...
IEnumerable&lt;string&gt; plansForProvider = plansLookup[providerId]; // Finds all plans for this provider


However, it's not clear that you need to be creating the List&lt;Tuple&lt;int, string&gt;&gt; in the first place. You can just use Linq to generate your ILookup from scratch:

var plansLookup = 
    (from plan in plans
     let productSummary = plan as OwnedProductSummary
     let serviceSummary = plan as OwnedServiceSummary
     let offeringDetail =
         (productSummary != null) ? _offeringBLL.GetById(productSummary.OfferingID) :
         (serviceSummary != null) ? _offeringBLL.GetById(serviceSummary.OfferingID) :
         new OfferingDetail()
     select new 
     {
         offeringDetail.ProviderID,
         plan.Name
     })
    .ToLookup(x =&gt; x.ProviderId, x =&gt; x.Name);