我对我的数据执行此查询:
newObj.TotalSizeDone =
_ctx.TestPackages.Where(
i =>
i.LineCheckState && i.TestState && i.Flushing && i.Drying && i.ReInstatement &&
i.CleaningState).Sum(i=>i.Size);
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
转换为值类型'System.Single'失败,因为具体化值为null.结果类型的泛型参数或查询必须使用可空类型.
我的课:
public int Id { set; get; }
public string PackageNumber { set; get; }
public float Size { set; get; }
public string Descrption { set; get; }
public DateTime SubmitDateTime { set; get; }
public string TestPackageLocation { set; get; }
public string TestPackageOrder { set; get; }
public string LineCheckReportNumber { set; get; }
public bool LineCheckState { set; get; }
public DateTime? LineCheckSubmitDateTime { set; get; }
public string CleanReportNumber { set; get; }
public bool CleaningState { set; get; }//ndt test
public DateTime? CleanSubmitDateTime { set; get; }
public string TestReportNumber { set; get; }
public bool TestState { set; get; }
public DateTime? TestSubmitDateTime { set; get; }
public string DryingReportNumber { set; get; }
public bool Drying { set; get; }
public DateTime? DryingSubmitDateTime { set; get; }
public string FlushingReportNumber { set; get; }
public bool Flushing { set; get; }
public DateTime? FlushingSubmitDateTime { set; get; }
public string ReInstatementReportNumber { set; get; }
public DateTime? ReInstatementSubmitDateTime { set; get; }
public bool ReInstatement { set; get; }
Run Code Online (Sandbox Code Playgroud)
数据 :
INSERT [dbo].[TestPackages] ([Id], [PackageNumber], [Size], [Descrption], [SubmitDateTime], [TestPackageLocation], [TestPackageOrder], [LineCheckReportNumber], [LineCheckState], [LineCheckSubmitDateTime], [CleanReportNumber], [CleaningState], [CleanSubmitDateTime], [TestReportNumber], [TestState], [TestSubmitDateTime], [DryingReportNumber], [Drying], [DryingSubmitDateTime], [FlushingReportNumber], [Flushing], [FlushingSubmitDateTime], [ReInstatementReportNumber], [ReInstatementSubmitDateTime], [ReInstatement]) VALUES (1, N'TestPackage-5185', 0, N'323', CAST(0x0000A658016AB9A6 AS DateTime), N'1220', N'1', N'256', 1, CAST(0x0000A66300000000 AS DateTime), N'15', 1, NULL, N'2626', 1, CAST(0x0000A66A00000000 AS DateTime), N'150', 1, CAST(0x0000A65800000000 AS DateTime), N'21', 1, CAST(0x0000A66300000000 AS DateTime), N'212', CAST(0x0000A66300000000 AS DateTime), 0)
GO
Run Code Online (Sandbox Code Playgroud)
mus*_*fan 10
导致该问题的原因是您没有任何与where子句逻辑匹配的数据(在本例中ReInstatement为false),这意味着返回零结果.
当执行Sumon on no results时,它将希望使用null结果,但返回类型Sum将期望与您的float类型匹配(因此它失败).
为了能够Sum在没有结果的情况下,您可以使用DefaultIfEmpty如下函数,这意味着永远不会有任何null值Sum要担心:
var results = _ctx.TestPackages.Where( i => i.LineCheckState &&
i.TestState &&
i.Flushing &&
i.Drying &&
i.ReInstatement &&
i.CleaningState);
// Sum the results, and in the event of a null value, assign 0f instead.
newObj.TotalSizeDone = results.Select(i => i.Size)
.DefaultIfEmpty(0f)
.Sum();
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下内容,以便Sum知道返回可以为空的类型(然后可以与之合并??):
newObj.TotalSizeDone = results.Sum(i => (float?)i.Size) ?? 0f;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |