var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid == covSourceGuid);
adminCov不断返回null。当我运行SQL分析器时,我可以看到生成的linq,当我将其传递到管理工作室时,我得到了我期望的结果。
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'
当我执行时,我得到一个结果。我在这里错过了什么? 谢谢你的帮助, 〜在圣地亚哥
答案 0 :(得分:1)
这是一个非常好的问题。在日期范围内选择发票时,我遇到了与Linq to SQL相同的问题。当它们包含在生成的SQL查询结果中时,它们中的一些不存在于对象结果中。我有一些严重的麻烦,因为有些发票没有出口到会计软件。
我所做的是创建存储过程,一切都运行得很好。
我真的想知道这个的真正解决方案以及它为什么会发生。
答案 1 :(得分:0)
如果你改变你的陈述,你会得到你的结果,如下(注意“等于”而不是“==”)?
var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid.Equals(covSourceGuid));
我过去曾经遇到过与GUID的一些比较平等问题(通常在单元测试中),但这里也可能适用。
答案 2 :(得分:0)
如果可能有零个或多个记录符合条件,则使用Single或SingleOrDefault总是有风险的。如果没有匹配或多个匹配,SingleOrDefault将返回null(在您的情况下,由于您说有数据,它可能会多于一个)。如果您尝试这样做,这应该导致“单个”抛出异常。作为替代方案,如果至少有一个匹配,您可以尝试使用FirstOrDefault来获得第一个匹配。没有匹配时它将返回null。
答案 3 :(得分:0)
您的SearchAgg_AdminCovs表是否设置了主键?我不确定,但是我曾经有些忘记设置一个,但不确定它是否是select / update / insert或delete。