Поведение следующего отличается, и это трудно управлять, в зависимости от того, был ли выполнен запрос:
using (var db = new DbContext())
{
db.Entities.Select(x => Math.Round(0.5)).First(); // return 1
db.Entities.ToList().Select(x => Math.Round(0.5)).First(); // returns 0
db.Entities.AsEnumerable().Select(x => Math.Round(0.5)).First(); // returns 0
}
Конечно, мой действительный код выполняет операцию на x
. это для простоты.
Я знаю, что есть Math.Round с MidpointRounding , но он не поддерживается Linq to Entities:
LINQ to Entities не распознает метод 'Double Round (Double,
System.MidpointRounding) ', и этот метод не может быть переведен
в магазинное выражение.
Мой вопрос, кроме выполнения запроса и округления в памяти, есть ли способ иметь такое же поведение в c # и Linq to Entities?
Есть ли способ установить поведение Math.Round по умолчанию, чтобы всегда использовать MidpointRounding.AwayFromZero
?