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