LINQ的帮助 - SQL跟踪返回结果,但DataContext的返回null(Linq help

2019-08-19 06:44发布

var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid == covSourceGuid);

adminCov不断回来空。 当我运行SQL事件探查器,我可以看到生成的LINQ,当我过去认为到Management Studio中,我得到的结果,我的期望。

LinqToSql产生这样的:

exec sp_executesql N'SELECT [t0].[AdminCovGuid], [t0].[AdminPolicyId], [t0].[CertSerialNumber], [t0].[CertNumber], [t0].[PseudoInsurerCd], [t0].[SourceSystemCode], [t0].[CovSeqNumber], [t0].[RiderSeqNumber], [t0].[CovRiderIndicator], [t0].[CovCd], [t0].[AddrSeqNumber], [t0].[TransferSeqNumber], [t0].[CovStatusIndicator], [t0].[CovEffectiveDate], [t0].[CovExpirationDate], [t0].[CovCancelDate], [t0].[ClmIntegCode], [t0].[ClmNumber], [t0].[ClmCertSeqNumber], [t0].[TermNumber], [t0].[CovPaidThruDate], [t0].[BillThruDate], [t0].[BillModeCode], [t0].[BillModeDesc], [t0].[CalcModeCode], [t0].[CalcModeDesc], [t0].[Form1Name], [t0].[BenefitAmt], [t0].[CovDesc], [t0].[ProdLineDesc], [t0].[PremiumAmt], [t0].[PremiumTypeIndicator], [t0].[PremiumTypeDesc]
FROM [dbo].[SearchAgg_AdminCov] AS [t0]
WHERE [t0].[AdminCovGuid] = @p0',N'@p0 uniqueidentifier',@p0='D2689692-33E8-4B31-A77B-2D3A627145D4'

当我执行,我得到一个结果。 我缺少的是在这里吗? 感谢您的帮助,在〜圣地亚哥CK

Answer 1:

这是很好的问题。 我使用LINQ同样的问题在日期范围内选择发票时为SQL。 他们中的一些人不存在对象的结果,同时他们被列入生成的SQL查询结果。 我与它的一些严重的问题,因为有些发票不出口到会计软件。

我所做的就是创建存储过程和一切工作完全正常。

我真的想知道这个真正的解决方案,为什么会发生。



Answer 2:

你得到你的结果回来,如果你改变你的语句,如下所示(请注意“等于”,而不是“==”)?

var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid.Equals(covSourceGuid));

我已经在过去(通常在单元测试)的GUID碰到一些比较平等问题,但同样可以适用于此。



Answer 3:

使用单个或的SingleOrDefault总是有风险的,如果有可能是零个或多个记录匹配的标准。 如果没有匹配或超过一个匹配的SingleOrDefault将返回null(在你的情况可能不止一个,因为你说有数据)。 这应该引起“单”抛出一个异常,如果你尝试。 作为替代,你可以尝试使用FirstOrDefault拿到第一场比赛,如果有至少一个匹配。 当没有匹配时,将返回null。



Answer 4:

请问您SearchAgg_AdminCovs表中有一个主键设置? 我不知道,但我用了一些头疼约忘记设置一个,但不知道这是否是选择/更新/插入或删除。



文章来源: Linq help - Sql trace returns result, but datacontext returning null