Несколько запросов Linq, где запросы

У меня возникла проблема с созданием довольно объемного запроса linq. В основном у меня есть ситуация, когда мне нужно выполнить подзапрос в цикле, чтобы отфильтровать количество совпадений, возвращаемых из базы данных. Пример кода приведен в этом цикле ниже:

        foreach (Guid parent in parentAttributes)
        {
            var subQuery = from sc in db.tSearchIndexes
                           join a in db.tAttributes on sc.AttributeGUID equals a.GUID
                           join pc in db.tPeopleIndexes on a.GUID equals pc.AttributeGUID
                           where a.RelatedGUID == parent && userId == pc.CPSGUID                             
                           select sc.CPSGUID;

            query = query.Where(x => subQuery.Contains(x.Id));
         }

Когда я впоследствии вызываю ToList() для переменной запроса, оказывается, что был выполнен только один из подзапросов, и у меня остается куча данных, которые я не требовать. Однако этот подход работает:

       IList<Guid> temp = query.Select(x => x.Id).ToList();

        foreach (Guid parent in parentAttributes)
        {
            var subQuery = from sc in db.tSearchIndexes
                           join a in db.tAttributes on sc.AttributeGUID equals a.GUID
                           join pc in db.tPeopleIndexes on a.GUID equals pc.AttributeGUID
                           where a.RelatedGUID == parent && userId == pc.CPSGUID                             
                           select sc.CPSGUID;

            temp = temp.Intersect(subQuery).ToList();
        }

        query = query.Where(x => temp.Contains(x.Id));

К сожалению, этот подход неприятный, поскольку он приводит к множественным запросам к удаленной базе данных, в результате чего первоначальный подход, если бы я мог заставить его работать, привел бы только к одному попаданию. Есть идеи?

10
задан kh25 13 March 2012 в 12:54
поделиться