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