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

EF7中LINQ查询转换JoinedResultsWithCategories报错求助

修复方案

针对你遇到的两个错误,直接按以下方式修改代码:

错误1:query永远不会为null

LINQ查询返回的IQueryable对象永远不会是null,哪怕没有匹配数据,也会返回空集合。所以直接删掉这段无效判断:

if (query == null)
    return new List<JoinedResultsWithCategories>();

错误2:匿名类型无法直接转换为目标类型

你当前查询返回的是包含ss和sc的匿名类型,不能直接强制转成JoinedResultsWithCategories。正确做法是在查询阶段直接投影成目标实体,同时注意要从ss和sc中取对应字段(比如BelongsToCategoryId应该来自sc,需根据实际实体结构调整):

修正后的完整代码

[Route("tables/skillsresults/GetSoftSkillsAndSubCatsFromUser/{userId}")]
public List<JoinedResultsWithCategories> GetSoftSkillsAndSubCatsFromUser(string userId)
{
    var query = from ss in _migrationDbContext.Set<SkillResultsItem>().Where(y => y.BelongsToUserId == userId)
                join sc in _migrationDbContext.Set<SubCategoriesItem>()
                on ss.BelongsToSkillId equals sc.Id
                select new JoinedResultsWithCategories()
                {
                    BelongsToUserId = ss.BelongsToUserId,
                    BelongsToCategoryId = sc.BelongsToCategoryId,
                    BelongsToSkillId = ss.BelongsToSkillId,
                    IsSkill = ss.IsSkill,
                    ValueEng = ss.ValueEng,
                    ValueGer = ss.ValueGer
                };

    return query.ToList();
}

额外注意点

  • 确保JoinedResultsWithCategories的字段来源正确:比如分类ID这类属性大概率来自SubCategoriesItem(sc),需根据你的实体实际属性调整赋值逻辑。
  • 去掉了多余的res变量初始化,直接通过query.ToList()返回结果,逻辑更简洁。
  • 远程数据库场景下,这种提前投影的方式能减少网络传输的数据量,性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:00:23