C# Entity Framework LINQ查询无返回但手写SQL有结果问题排查
问题排查点
- 字段名不一致:你LINQ查询中取JSON值用的字段是
lact.ActivationInfoJSON,但手写SQL中对应字段是ActivationInfo,先确认实体类字段和数据库表字段的映射是否正确,这是最可能导致无返回结果的原因。 - NULL判断逻辑差异:手写SQL中使用
= NULL判断空值,这种写法仅在数据库ANSI_NULLS关闭时生效,而EF生成的SQL默认遵循ANSI标准,会将== null翻译为IS NULL。如果你的数据库实际ANSI_NULLS是开启状态,你手写的SQL其实写法不规范,只是刚好返回结果,需要确认IsConverted字段的JSON值实际存储的空值形态,调整LINQ中的判断逻辑。 - JOIN匿名类型不匹配:多表关联的匿名类
new { a = lsn.Id, b = lp.ProductId }和new { a = lact.LicenseSerialNumberId, b = lact.ProductId }要求字段名、字段类型完全一致才会匹配成功,若两侧字段类型不一致(比如一侧是int、另一侧是long,或者一侧是字符串、另一侧是数值),会导致JOIN无匹配结果,自然无返回值。 - AccountId参数值错误:手写SQL中AccountId是写死的常量,LINQ中使用的是变量
AccountId,请确认运行时该变量的实际值是否和手写SQL中的常量完全一致,是否存在多余空格、大小写差异、引号遗漏等问题。 - JSON函数翻译异常:请开启EF的SQL日志输出,查看LINQ实际生成的SQL语句,确认
JsonExtensions.JsonValue是否被正确翻译为JSON_VALUE函数,有没有出现翻译错误、参数拼接错误的问题。 - Distinct影响(概率较低):LINQ查询最后调用了
Distinct()去重,手写SQL没有加该逻辑,仅当所有查询结果都重复时才会导致无返回值,可先去掉Distinct测试是否有结果返回。
内容的提问来源于stack exchange,提问作者user8837476
相关产品推荐
相关产品推荐

