Неправильное целочисленное деление LINQ to Entities? - PullRequest
1 голос
/ 02 октября 2011

Я пытаюсь сделать небольшое разбиение, разделив записи списка на 6-месячные блоки. Используя этот запрос LINQ to Entities, я получаю результаты, которые подразумевают, что целочисленное деление не происходит:

 from e in enrollments 
let AgeInHalfYears = e.AgeMonths / 6 
select new { e.AgeMonths , 
         AgeInHalfYears, 
         AgeFloor = ((int)AgeInHalfYears) * 6 }

Мои результаты:

AgeMonths   AgeInHalfYears  AgeFloor
68          11              68
41           7              41
34           6              34

Я бы ожидал 66, 36 и 30 в этом последнем столбце.

Я переписал LINQ довольно просто:

AgeFloor = e.AgeMonths - (e.AgeMonths% 6)

Но мне все еще любопытно, почему операция деления является явно плавающей точкой, даже с этим (int) приведением там ... Я бы не ожидал этого.

1 Ответ

1 голос
/ 02 октября 2011

Entity Framework, вероятно, игнорирует ваше приведение при генерации SQL.

Генераторы SQL на основе LINQ редко (если вообще) совершенны.
В частности, система типов .Net достаточно отличается от SQL, так что они, вероятно, игнорируют все приведения.

Попробуйте позвонить Math.Floor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...