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

.NET Core 6 Cosmos DB EF LINQ查询无法翻译问题求助

EF Core Cosmos DB 查询包含特定子对象的父实体解决方案

修正后的服务器端查询代码

var assets = _context.Assets
    .Where(asset => asset.Cards.Any(card => card.CardType == "dummy"))
    .ToList();

原查询问题说明

你之前使用的SelectMany嵌套查询逻辑,无法被EF Core Cosmos DB的查询提供器翻译为有效的Cosmos DB SQL语句,因此触发了无法翻译的异常。这种展开后回选父实体的逻辑不在EF Core Cosmos支持的翻译范围内。

修正方案优势

  • 采用Where+Any的写法会被直接翻译为Cosmos DB的EXISTS查询,完全在服务器端执行,不会拉取全量数据,彻底避免客户端评估带来的性能损耗。
  • 该写法天然无需Distinct,因为每个符合条件的Asset只会被匹配一次(只要包含至少一个CardType为dummy的Card),直接返回目标集合。

扩展:如需同时过滤子对象

如果需要返回Asset的同时,只保留其中符合条件的Card子对象,可以使用投影查询:

var assetsWithFilteredCards = _context.Assets
    .Where(asset => asset.Cards.Any(card => card.CardType == "dummy"))
    .Select(asset => new 
    {
        Asset = asset,
        FilteredCards = asset.Cards.Where(card => card.CardType == "dummy")
    })
    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:12:48