Refactor VB.NET to C#.Net using Linq I am rewriting a VB.NET application in C#. I will not subject you to the original code because it's pretty messy. Below is the converted C# code:

   public IEnumerable&lt;WebQuery&gt; GetQueries(Request request)
    {
        var queries = new List&lt;WebQuery&gt;();
        foreach (var report in request.Reports)
        {
            queries.AddRange((from query in _context.WebQueries
                join qg in _context.WebQueryGroups on query.QueryKey equals qg.QueryKey
                join wp in _context.WebPermissions on qg.QueryGroupNameKey equals wp.TaskGroupNameKey
                join wugn in _context.WebUserGroupNames on wp.UserGroupNameKey equals wugn.UserGroupNameKey
                join wug in _context.WebUserGroups on wugn.UserGroupNameKey equals wug.UserGroupNameKey
                join wt in _context.WebTasks on query.QueryCategory equals wt.TaskReportCategory
                where wt.TaskKey == request.Key &amp;&amp; wp.ResourceKey == 4 &amp;&amp; wt.TaskKey == request.Key &amp;&amp; wug.UserKey == report.UserKey
                select query).OrderBy(x =&gt; x.QueryTitle));
        }
        return queries;
    }


As you can see, I am committing a grievous error in making a call to the database many times.

I am not sure how to append the loop to my query so that I only call the context one time.
Have you tried:

    public IEnumerable&lt;WebQuery&gt; GetQueries(Request request)
    {
        List&lt;string&gt; keys = request.Reports.Select(i =&gt; i.UserKey).ToList();
        var queries = new List&lt;WebQuery&gt;();
        queries.AddRange((from query in _context.WebQueries
            join qg in _context.WebQueryGroups on query.QueryKey equals qg.QueryKey
            join wp in _context.WebPermissions on qg.QueryGroupNameKey equals wp.TaskGroupNameKey
            join wugn in _context.WebUserGroupNames on wp.UserGroupNameKey equals wugn.UserGroupNameKey
            join wug in _context.WebUserGroups on wugn.UserGroupNameKey equals wug.UserGroupNameKey
            join wt in _context.WebTasks on query.QueryCategory equals wt.TaskReportCategory
            where wt.TaskKey == request.Key 
                &amp;&amp; wp.ResourceKey == 4 
                &amp;&amp; wt.TaskKey == request.Key 
                &amp;&amp; keys.Contains(wug.UserKey)
            select query).OrderBy(x =&gt; x.QueryTitle));
        return queries;
    }


?