gpt4 book ai didi

c# - 使用 WHERE 子句获取可为空列的 SUM

转载 作者:行者123 更新时间:2023-12-01 22:39:03 26 4
gpt4 key购买 nike

我在使用 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 没有类型:

SessionType Table SessionTime Properties

最佳答案

只需过滤掉这些行:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com