【问题标题】:Linq help - Sql trace returns result, but datacontext returning nullLinq 帮助 - Sql 跟踪返回结果,但 datacontext 返回 null
【发布时间】:2010-12-07 10:35:44
【问题描述】:
var adminCov = db.SearchAgg_AdminCovs.SingleOrDefault(l => l.AdminCovGuid == covSourceGuid);

adminCov 不断返回 null。当我运行 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 在圣地亚哥

【问题讨论】:

  • 如果您将SingleOrDefault 更改为Single,它会崩溃吗?.. 看看这是否会产生“序列不包含任何元素”的消息

标签: c# sql linq linq-to-sql


【解决方案1】:

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

我所做的是创建存储过程,一切正常。

我真的很想知道这个问题的真正解决方案以及它发生的原因。

【讨论】:

  • 这对我来说是一个奇怪的错误。我们正在针对多个数据库进行开发,这只是一个连接字符串问题。真是一个疏忽。
  • 我突然遇到这个问题,有人能得到真正的答案吗?
  • 我没有。我已经放弃使用 L2S,现在我对 EF 非常满意。
【解决方案2】:

如果您更改语句,是否会返回结果,如下所示(注意“等于”而不是“==”)?

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

我过去曾遇到过一些与 GUID 比较相等的问题(通常在单元测试中),但这里可能同样适用。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您的 SearchAgg_AdminCovs 表是否设置了主键?我不确定,但我曾经为忘记设置一个而头疼,但不确定是选择/更新/插入还是删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 2014-09-13
        • 1970-01-01
        相关资源
        最近更新 更多