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

LINQ查询生成SQLite语句带多余INNER JOIN,如何调整得到预期SQL?

问题原因

你已经在Upgrade实体中定义了指向Resource的导航属性Res,无需手动编写join语句关联两张表。手动加join的操作会触发EF Core的查询翻译逻辑重复生成关联逻辑,最终产生多余的INNER JOIN语句。

调整后的LINQ代码

from u in _db.Upgrades
where u.Lvl > levelFrom
    && u.Lvl <= levelTo
// 直接用导航属性分组,无需手动关联Resource表
group u by new { u.Res.id, u.Res.Name } into grp
select new UpgradeCost()
{
    resName = grp.Key.Name,
    resAmount = grp.Sum(k => k.Amount),
};

如果业务场景允许Upgrade不存在关联的Resource(即Res可能为null),可以在where条件中新增&& u.Res != null过滤无效数据,避免分组时出现null键的异常。

调整后生成的SQL只会关联一次Resource表,完全符合你预期的查询结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:57:03