2011-10-02 58 views
1

我正在尝试做一个小分区,将列表项分成6个月的块。使用这个LINQ到实体查询,我得到暗示整数除法没有发生的结果: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

在生成SQL时,实体框架可能会忽略您的转换。

基于LINQ的SQL生成器很少(如果有的话)是完美的。
特别是.Net的类型系统与SQL的不同之处在于它们可能会忽略所有的强制转换。

尝试调用Math.Floor来代替。

+0

好的,我会买的。 –