В веб-приложении, с которым я работаю, я нашел медленный фрагмент кода, который я хотел немного ускорить. Оригинальный код ниже:Почему эти два запроса linq возвращают разные результаты?
foreach (Guid g in SecondaryCustomersIds)
{
var Customer = (from d in Db.CustomerRelationships
join c in Db.Customers on
d.PrimaryCustomerId equals c.CustomerId
where c.IsPrimary == true && d.SecondaryCustomerId == g
select c).Distinct().SingleOrDefault();
//Add this customer to a List<>
}
Я думал, что это может быть быстрее, чтобы загрузить все это в одном запросе, поэтому я попытался переписать его как ниже запроса:
var Customers = (from d in Db.CustomerRelationships
join c in Db.Customers on
d.PrimaryCustomerId equals c.CustomerId
where c.IsPrimary == true && SecondaryCustomersIds.Contains(d.SecondaryCustomerId)
select c).Distinct();
которая действительно быстрее, но теперь новый запрос возвращает меньше записей, чем первый. Мне кажется, что эти два куска кода делают то же самое и должны возвращать одинаковое количество записей. Кто-нибудь может понять, почему они этого не сделали? Что мне здесь не хватает?
Возможно, у вас есть дубликаты в 1-м? Вы пробовали сделать «.Distinct» в последнем списке, к которому вы добавляете всех клиентов? – SJuan76
Нет, извините, я должен был упомянуть об этом. Получение отдельного финального списка возвращает один и тот же счетчик, поэтому дубликатов не возвращается. –
Как определяется «SecondaryCustomersIds»? – SJuan76