EF Query 将 IQueryable<T> 更改为 T

问题描述 投票:0回答:1

在实体框架中使用继承时,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;
}
c# entity-framework linq-to-entities
1个回答
0
投票

您可以以任何一种方式使用

OfType
- 唯一的区别是向下转型始终是安全的,因此它将为您提供所有项目(不需要类型检查)作为
IEnumerable<supercclass>

我会做

return students.Cast<User>();
,因为你知道演员阵容是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.