【发布时间】:2021-06-12 06:53:24
【问题描述】:
我不知道如何表达这个问题,但我有一个名为 Teacher 的模型,一个名为 Class 的模型,以及第三个用于 TeacherClasses 的多对多关系的查找表
public class TeacherClass
{
public int Id get/set
public int TeacherId get/set
public int ClassId get/set
}
public class TeacherClassDto
{
public int Id get/set
public int TeacherId get/set
public int ClassId get/set
public string ClassName get/set
}
我想查询老师,并返回一个新的 dto,如下所示:
public class TeacherDto
{
... some props
public ICollection<Classes> Classes get/set
}
我的 LINQ 查询没有通过。有什么帮助吗?
try
{
var teachersWithTheirClasses= dbContext.Teachers.Where(x => x.Status == StatusEnum.Active).Select(teacherDto => new TeacherDto
{
Id = teacherDto.Id,
Classes= dbContext.TeacherClasses.Where(x => x.TeacherId == teacherDto.Id).Select(class => new TeacherClassDto
{
Id = class.Id,
ClassId = class .ClassId,
ClassName = dbContext.Classes.Where(x => x.Id == class.ClassId).Select(x => x.Name)
}).FirstOrDefault()
});
return await teachersWithTheirClasses.ToListAsync();
}
错误是无法将 System.IQueryable 隐式转换为字符串(对于 className 属性)
【问题讨论】:
-
你说的没有通过是什么意思?所以它卡在某个地方?或者它甚至不运行(通过设置断点验证)?
-
我的查询抛出 500 并说无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。请参阅go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
-
实际上我认为您的查询甚至没有编译(在设计时)。加入条件写错了(顺序错误),
class.Id在哪里?我看不到class参考(实际上class是一个特殊的关键字,不能这样写)。这意味着您没有发布您的确切代码。
标签: .net linq asp.net-core