2009-10-16 58 views
2
var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid == covSourceGuid); 

adminCov保持返回null。当我运行SQL分析器时,我可以看到生成的linq,当我将其转换到management Studio中时,我得到了我期望的结果。Linq help - Sql跟踪返回结果,但datacontext返回null

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

+0

如果您将'SingleOrDefault'更改为'Single',它会不会崩溃?看看是否产生了一个消息,其结果是“Sequence contains no elements” –

回答

1

这真的是一个很好的问题。在选择日期范围内的发票时,我遇到了与Linq to SQL相同的问题。其中一些不在对象结果中,而它们包含在生成的SQL查询结果中。我遇到了一些严重的麻烦,因为一些发票没有导出到会计软件中。

我所做的是创建存储过程,一切工作都很好。

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

+0

这是我的一个奇怪的错误。我们正在开发针对多个数据库,这只是一个连接字符串问题。真是一个疏忽。 – Hcabnettek

+0

我突然遇到这种麻烦,任何人都可以得到真正的答案? – Slee

+0

我没有。我已经放弃使用L2S,现在我对EF非常满意。 – kubal5003

0

如果你改变你的陈述,你会得到你的结果,如下(注意“等于”而不是“==”)?

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

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

0

如果可能有零个或多个匹配条件的记录,则使用Single或SingleOrDefault总是有风险的。如果没有匹配或多个匹配,SingleOrDefault将返回null(在您的情况下,由于您说有数据,它可能会不止一个)。这应该会导致“Single”抛出异常,如果你尝试的话。作为替代方案,如果至少有一场比赛,您可以尝试使用FirstOrDefault获得第一场比赛。当没有匹配时它将返回null。

0

您的SearchAgg_AdminCovs表是否有主键集?我不确定,但我曾经有一些关于忘记设置的问题,但不知道是否选择/更新/插入或删除。