Right now, I have a class called TrainingPlan that looks like this:
public class TrainingPlan
{
   public int WorkgroupId { get; set; }
   public int AreaId { get; set; }
}
I'm given an array of these instances, and need to load the matching training plans from the database.  The WorkgroupId and AreaId basically form a compound key.  What I'm doing now is looping through each TrainingPlan like so:
foreach (TrainingPlan plan in plans)
   LoadPlan(pid, plan.AreaId, plan.WorkgroupId);
Then, LoadPlan has a LINQ query to load the individual plan:
var q = from tp in context.TPM_TRAININGPLAN.Include("TPM_TRAININGPLANSOLUTIONS")
        where tp.PROJECTID == pid && tp.AREAID == areaid &&
              tp.WORKGROUPID == workgroupid
              select tp;
return q.FirstOrDefault();
The Problem:
This works, however it's very slow for a large array of plans.  I believe this could be much faster if I could perform a single LINQ query to load in every TPM_TRAININGPLAN at once.
My Question:
Given an array of TrainingPlan objects, how can I load every matching WorkgroupId/AreaId combination at once?  This query should translate into similar SQL syntax:
SELECT * FROM TPM_TRAININGPLANS
WHERE (AREAID, WORKGROUPID) IN ((1, 2), (3, 4), (5, 6), (7, 8));
 
     
    