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

