У меня есть подзапрос linq:
for (int i = 0; i < parentAttributes.Length; i++)
{
Guid parent = parentAttributes[i];
var subQuery = from sc in db.tSearchCluendexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
join pc in db.tPeopleCluendexes on a.GUID equals pc.AttributeGUID
where a.RelatedGUID == parent && userId == pc.CPSGUID
select sc.CPSGUID;
query = query.Where(x => subQuery.Contains(x.Id));
}
Основная идея состоит в том, что я фильтрую список данных (представленных переменной запроса) на основе результатов подзапроса, выполненного неопределенное количество раз.
Однако теперь у меня есть проблема, из-за которой я хочу выполнять запрос where только в том случае, если подзапрос действительно содержит данные, и я не хочу выполнять подзапрос в каждой итерации цикла (например, с помощью Count ( ) или ToList ()), поскольку это поразит удаленный ресурс. Примерно так, как показано ниже, если мы примем, что метод HasData () на самом деле возвращает true или false:
for (int i = 0; i < parentAttributes.Length; i++)
{
Guid parent = parentAttributes[i];
var subQuery = from sc in db.tSearchCluendexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
join pc in db.tPeopleCluendexes on a.GUID equals pc.AttributeGUID
where a.RelatedGUID == parent && userId == pc.CPSGUID
select sc.CPSGUID;
if (subQuery.HasData())
query = query.Where(x => subQuery.Contains(x.Id));
}
Предложения приветствуются.