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

Dynamic LINQ中使用LIKE运算符出现解析异常的问题排查

问题原因及解决方案

问题本质

官方文档的示例存在版本适配问题,DynamicFunctions.Like的用法在新版本的Dynamic LINQ(尤其是EF Core适配版本)中已不再兼容,解析器会错误地将DynamicFunctions识别为枚举类型而非静态类。

可行解决方案

方案1:使用原生字符串匹配方法替代(推荐)

Dynamic LINQ支持直接映射SQL LIKE的原生方法,无需依赖DynamicFunctions:

  • Contains("xxx") 对应 LIKE '%xxx%'
  • StartsWith("xxx") 对应 LIKE 'xxx%'
  • EndsWith("xxx") 对应 LIKE '%xxx'

修改后的查询代码:

// 单条件示例
var result = queryable.Where(config, "MyColumn.Contains(@0)", "%a%").ToList();

// 复杂多条件拼接示例
var query = string.Join($" {myOperator} ", values.Select((value, index) => $"MyColumn.Contains(@{index})"));
if (isNot) query = $"not ({query})";
return queryable.Where(config, query, values);

方案2:手动注册DynamicFunctions类型

如果必须使用Like语法,需将DynamicFunctions静态类添加到解析器的已知类型集合中,确保解析器能正确识别:

var config = new ParsingConfig
{
    ResolveTypesBySimpleName = true,
    // 添加DynamicFunctions类型到已知类型
    KnownTypes = { typeof(Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions) }
};
var result = queryable.Where(config, "DynamicFunctions.Like(MyColumn, @0)", "%a%").ToList();

注意:此方案要求Microsoft.EntityFrameworkCore.DynamicLinq与System.Linq.Dynamic.Core版本严格兼容,否则仍可能出现方法不存在的错误。


内容的提问来源于stack exchange,提问作者Stefan S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:46