LINQ查询触发DbExpressionBinding输入表达式报错问题咨询
报错原因
- 核心原因是EF/EF Core 执行
IQueryable类型的LINQ查询时,无法将「ICollection类型导航属性的SelectMany(双from语法)+ 内存字符串数组的All判断」的组合逻辑翻译成合法的SQL表达式,触发了表达式绑定异常。 - 额外需先确认代码变量名匹配:你提供的参数说明中数组名为
motsCt、数据源为dtResult,但代码中写的是motsE和dtRe,变量名不匹配也可能引发运行时异常。
解决办法
方案1:小数据量场景,切换到内存LINQ执行
如果符合条件的数据量较小,可以先预加载导航属性后在内存中执行过滤,EF不需要翻译复杂表达式:
var a = dtResult.Include(q => q.Pro) .AsEnumerable() .Where(q => q.Pro.Any(p => motsCt.All(word => p.Title.Contains(word)))) .ToList();
方案2:大数据量场景,改写逻辑适配EF翻译规则
motsCt.All(word => p.Title.Contains(word))等价于所有词都要满足匹配条件,可以拆解为多次Where判断,EF可顺利翻译为SQL:
var query = dtResult.AsQueryable(); foreach (var word in motsCt) { query = query.Where(q => q.Pro.Any(p => p.Title.Contains(word))); } var a = query.ToList();
内容的提问来源于stack exchange,提问作者Coder-Meca
相关产品推荐
相关产品推荐

