【发布时间】:2015-05-18 17:23:07
【问题描述】:
我在使用 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 WHERE Userid = x 中 SessionTime 列的 SUM
现在 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);
错误 2019 年错误:指定的成员映射无效。方式 成员“SessionTime”的“Edm.Double[Nullable=True,DefaultValue=]” 类型“RaptorModel.OnlineHistory”不兼容 'SqlServer.int[Nullable=True,DefaultValue=,StoreGeneratedPattern=Computed]' 成员 'SessionTime' 的类型 'RaptorModel.Store.OnlineHistory'。 RaptorDb C:\Users\Dave\documents\visual 工作室 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 没有类型:
【问题讨论】:
-
看来您应该在 edmx 设计器中将类型更改为
int?。
标签: c# sql sql-server entity-framework-6