У меня проблема с созданием довольно внушительного запроса 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));
К сожалению, этот подход неприятен, так как он приводит к нескольким запросам к удаленной базе данных, благодаря чему первоначальный подход, если я могу заставить его работать, приведет только к одному результату. Любые идеи?