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
相关产品推荐
相关产品推荐

