В первом случае сумма выполняется в базе данных.В последнем случае сумма выполняется в памяти, на стороне клиента, в .NET.Я подозреваю, что вы переполнены в базе данных.Поскольку вы не указали нам тип данных в базе данных и то, является ли PAN
уникальным идентификатором для TOTALS
, у нас недостаточно информации, чтобы точно это сделать, но я определенно сосредоточусь на этом.Внимание в первую очередь.
Редактировать: Вот способ увидеть разницу.Перепишите ваш код как
var rawData = (from e in Context.TOTALS
where (e.PAN == "2600000246701" || e.PAN == "2600000246696")
select e.TOTAL
).AsEnumerable()
.Sum();
. AsEnumerable
там заставляет Sum
вычисляться в памяти.Без этого Sum
выполняется в базе данных.В последнем случае вы знаете, что получаете исключение переполнения.В первом случае, я подозреваю, что вы не будете.Если это так, это говорит о том, что проблема заключается в одной базе данных.
Кроме того, обратите внимание, что вторая версия вашего кода не обязательно обязательно эквивалентна первой версии вашего кода.Вы не сказали нам, хотя это выглядит так, является ли PAN
уникальным идентификатором.Если это не так, во втором случае вы сбрасываете только один экземпляр TOTALS
, у которого PAN
равен каждому из заданных PAN
с.В вашей первой версии вы суммируете по всем экземплярам TOTALS
с указанными PAN
с.Вот почему я должен быть немного осторожнее и только сказать, что похоже, что вы переполняете базу данных, но мы не можем сказать наверняка.