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

.NET中List存数据库单列后LINQ查询报错问题

解决EF Core JSON嵌套集合查询翻译错误问题

问题原因

List<T>.Exists()是List的实例方法,并非LINQ标准查询操作符,EF Core无法将其翻译成对应的SQL语句来操作数据库中存储的JSON字段,因此抛出翻译失败的错误。而Any()是LINQ的标准扩展方法,EF Core(5及以上版本)对JSON字段的嵌套集合查询提供了完善的翻译支持。

解决方案1:替换Exists为Any(推荐)

将查询中的Exists替换为Any,修改后的代码如下:

var query =
    from card in dbContext.Cards
    where
    card.Items
        .Any(
            c => c.ContentItems.Any(ci => ci.ItemKey != null)
        )
    select card;

这样EF Core可以正确将Any翻译成针对JSON字段的SQL查询(如SQL Server的JSON函数),实现服务器端过滤,性能更优。

解决方案2:客户端评估(不推荐,仅适合小数据量)

如果因特殊需求必须使用Exists,可通过AsEnumerable()先将数据加载到客户端内存再过滤,但这会加载所有Cards数据到本地,性能损耗大,仅适合数据量极小的场景:

var query =
    from card in dbContext.Cards.AsEnumerable()
    where
    card.Items
        .Exists(
            c => c.ContentItems.Exists(ci => ci.ItemKey != null)
        )
    select card;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:50:12