在实体框架中使用继承时,OfType<>() 来过滤查询以仅包含特定子类的行。生成的 IQueryable 是子类的类型。有没有办法做到相反?从子类到超类?
这是一个以“错误方式”执行此操作的基本示例,在 C# 端创建第二个列表
public class User {}
public class Teacher : User {}
public class Student : User {}
public class Session
{
Guid Id;
Teacher Teacher;
IEnumerable<Student> Students;
}
public IEnumerable<User> GetStudentsAsUsers(Guid sessionId)
{
List<Student> students = context.Sessions
.Where(session => session.Id == sessionId)
.Select(session => session.Students)
.ToList();
List<User> users = new List<User>();
users.AddRange(students);
return users;
}
您可以以任何一种方式使用
OfType
- 唯一的区别是向下转型始终是安全的,因此它将为您提供所有项目(不需要类型检查)作为 IEnumerable<supercclass>
。
我会做
return students.Cast<User>();
,因为你知道演员阵容是安全的。