我正在尝试在我的数据库上设置一个 LINQ 控制器。我几乎可以肯定我真的很接近,但这最终让我感到困惑:
[Route("tables/skillsresults/GetSoftSkillsAndSubCatsFromUser/{userId}")]
public List<JoinedResultsWithCategories> GetSoftSkillsAndSubCatsFromUser(string userId)
{
var res = new List<JoinedResultsWithCategories>();
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 { ss, sc };
if (query == null)
return new List<JoinedResultsWithCategories>();
res = query.ToList<JoinedResultsWithCategories>();
res.Select(x => new JoinedResultsWithCategories()
{
BelongsToUserId = x.BelongsToUserId,
BelongsToCategoryId = x.BelongsToCategoryId,
BelongsToSkillId = x.BelongsToSkillId,
IsSkill = x.IsSkill,
ValueEng = x.ValueEng,
ValueGer = x.ValueGer
}).ToList<JoinedResultsWithCategories>();
return res;
}
这不起作用,因为:
'query' 在这里不为空。在“query.toList”上。
“IQueryable<
>”不包含“ToList”的定义,最佳扩展方法重载“Enumerable.ToList(IEnumerable)”需要类型为“System.Collections.Generic.IEnumerable ”的接收器
我该如何解决这个问题?该控制器连接到远程数据库。
您的 LINQ 查询返回带有
SkillResultsItem
和 SubCategoriesItem
的匿名类型。
select new { ss, sc };
所以你不能只是将它转换为
List<JoinedResultsWithCategories>
要修复它,你需要修改你的查询以选择你需要的 SkillResultsItem
和 SubCategoriesItem
的属性,然后使用这些创建一个新的 JoinedResultsWithCategories
实例特性。我不知道你在这种类型中有哪些属性,但这里有一个代码示例
[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>();
}