You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将全0空GUID转为null以适配数据库null值的查询匹配

解决方案

你可以通过参数预处理或者查询条件兼容两种方式处理空GUID到NULL的映射:


方案1:预先转换查询参数(兼容性最高)

在构建查询前先把入参中的全0GUID转换为可空GUID的null值,绝大多数ORM会自动将== null的等值条件转换为SQL的IS NULL语法,匹配数据库的存储值:

// 预处理过滤参数:空GUID转null
Guid? countryFilter = request.CountryId == Guid.Empty ? null : request.CountryId;

// 修改后的查询语句
var characteristicPrices = await scope.BuildQuery<CharacteristicPrice, CharacteristicVersion, CharacteristicPrice>((op, ccp, cv) => op.Select(op.AllColumnsOf(ccp))
   .InnerJoin<CharacteristicVersion>(cv.Id == ccp.CharacteristicVersionId)
   .Where(ccp.CountryId == countryFilter && cv.VersionId == request.VersionId)).Get();

方案2:查询条件直接兼容(无需改动外部参数)

如果不希望提前处理参数,也可以直接在Where表达式中写分支判断:

var characteristicPrices = await scope.BuildQuery<CharacteristicPrice, CharacteristicVersion, CharacteristicPrice>((op, ccp, cv) => op.Select(op.AllColumnsOf(ccp))
   .InnerJoin<CharacteristicVersion>(cv.Id == ccp.CharacteristicVersionId)
   .Where(
       (request.CountryId == Guid.Empty ? ccp.CountryId == null : ccp.CountryId == request.CountryId) 
       && cv.VersionId == request.VersionId
   )).Get();

注意事项

  • 请确保实体类CharacteristicPrice的CountryId属性定义为可空类型Guid?,否则ORM无法正确生成IS NULL查询语句
  • 如果你使用的ORM不支持条件表达式的自动解析,优先使用方案1的预处理逻辑

内容的提问来源于stack exchange,提问作者jiyanyasli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:54:00