- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 WHERE
子句检索 EF6 中列的 SUM
时遇到一些问题。
我正在使用这个:
double oh2 = raptorEntities.OnlineHistories
.Where(us => us.Id == user.Id)
.Sum(r => (double?) r.SessionTime) ?? 0; // Need the cast as we may get a null !
这个想法是获取 OnlineHistories 中 SessionTime 列的 SUM
WHERE
Userid = x
现在 SessionTime 列是一个计算列并包含值...并且允许 NULL
任何人都可以修复此表达式以使其正常工作吗?
更新一个
使用建议的修复:
double oh2 = raptorEntities.OnlineHistories.Where(us => us.Id == user.Id &&
us.SessionTime.HasValue).Sum(r => r.SessionTime);
我必须像这样转换它,并收到错误:
double oh2 = raptorEntities.OnlineHistories.Where(us => us.Id == user.Id &&
us.SessionTime.HasValue).Sum(r => (double)r.SessionTime);
Error Error 2019: Member Mapping specified is not valid. The type 'Edm.Double[Nullable=True,DefaultValue=]' of member 'SessionTime' in type 'RaptorModel.OnlineHistory' is not compatible with 'SqlServer.int[Nullable=True,DefaultValue=,StoreGeneratedPattern=Computed]' of member 'SessionTime' in type 'RaptorModel.Store.OnlineHistory'. RaptorDb C:\Users\Dave\documents\visual studio 2015\Projects\RaptorService\RaptorDb\RaptorModels.edmx 835
映射如下:
<EntitySetMapping Name="OnlineHistories">
<EntityTypeMapping TypeName="RaptorModel.OnlineHistory">
<MappingFragment StoreEntitySet="OnlineHistory">
<ScalarProperty Name="SessionTime" ColumnName="SessionTime" />
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="UserId" ColumnName="UserId" />
<ScalarProperty Name="OnlineAt" ColumnName="OnlineAt" />
<ScalarProperty Name="OfflineAt" ColumnName="OfflineAt" />
</MappingFragment>
</EntityTypeMapping>
更新二:SessionTime 没有类型:
最佳答案
只需过滤掉这些行:
double oh2 = raptorEntities.OnlineHistories
.Where(us => us.Id == user.Id && us.SessionTime.HasValue)
.Sum(r => r.SessionTime);
编辑:
您正在查找edmx:Mappings
。相反,请在 edmx:StorageModels
中查找类型。同样在对象资源管理器
中的Sql Server
中展开tables->OnlineHistories->Columns
,您可能应该能够看到类型是 int
。不知何故,在你的模型中它的类型是double
。如果我在 edmx
中手动将列类型从 int
更改为 double
,我可以重现此错误。但默认情况下,它在我的模型中创建为 int
。您可以尝试从模型中删除该表并再次导入。
值得注意的是 Sum
函数似乎消除了 NULL
本身:
double oh2 = raptorEntities.OnlineHistories
.Where(us => us.Id == user.Id)
.Sum(r => r.SessionTime);
关于c# - 使用 WHERE 子句获取可为空列的 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30309339/
我是一名优秀的程序员,十分优秀!