C# 将表类型作为T传递给泛型列表

C# 将表类型作为T传递给泛型列表,c#,list,entity-framework,generics,C#,List,Entity Framework,Generics,我有一个名为myTable的表。使用EntityFramework,我可以创建一个查询的myTable列表,如下所示: List<myTable> myList = context.myTables.ToList(); List myList=context.myTables.ToList(); 我想在一个“Utilities”类中创建一个可重用的方法,在这个类中我可以向该方法传递一个表类型并创建该类型的列表 比如: public static void ListFromType

我有一个名为
myTable
的表。使用EntityFramework,我可以创建一个查询的
myTable
列表,如下所示:

List<myTable> myList = context.myTables.ToList();
List myList=context.myTables.ToList();
我想在一个“Utilities”类中创建一个可重用的方法,在这个类中我可以向该方法传递一个表类型并创建该类型的列表

比如:

public static void ListFromType(Type suppliedTableType)
{
    List<supliedTableType> myList = new List<suppliedTableType>();
}
公共静态无效列表FromType(类型suppliedTableType)
{
List myList=新列表();
}

您尝试执行的操作无法编译(我相信您知道)

如果你真的想要一些新奇的Linq,可以实现同样的效果你可以使用
Enumerable.Empty
并调用
ToList()

List<myTable> someList = Enumerable.Empty<myTable>().ToList();
List-someList=Enumerable.Empty().ToList();

如果您的目标是基于
System.Type
变量(如非编译代码示例中所示)创建列表,则必须混合使用反射和
枚举的其他方法@卡米洛指出了一个可能有助于实现这些目标的方法。您的问题被标记为泛型而非反射,因此我不想做太多假设。

使用EF,您有两个选择(除了直接访问命名的数据库集):

  • 一般的

    List<T> myList = context.Set<T>().ToList();
    
  • 对于变量2,您只能得到非类型化的对象,因为在编译时类型是未知的

    Type type = ...;
    WhichTypeShouldWeUseHere list = ListFromType(type);
    
    注意:泛型集合的优点是允许对其项进行强类型访问。“强类型”始终意味着编译器将测试该类型上操作的类型兼容性,因此,必须在编译时知道该类型

    Type type = ...;
    WhichTypeShouldWeUseHere list = ListFromType(type);
    
    假设有一个方法接受
    类型
    参数。列表应该有哪种类型?我们在编译时不知道它

    Type type = ...;
    WhichTypeShouldWeUseHere list = ListFromType(type);
    

    你的问题与EF有什么关系?您只想创建一个空列表吗<代码>var myList=新列表()
    您可以添加(或对它的引用),以提供另一个实际解决问题的选项problem@CamiloTerevinto是的,我甚至不确定OP想要什么。我将在我的答案中添加一个链接,但我不会详细说明。您希望如何使用用反射构造的泛型类型?您需要知道编译时的类型才能访问列表。@OlivierJacot Descombes您应该能够访问DbContext的所有类型(因为这是EF)。是的,您可以通过
    context.Set以常规方式访问所有表。我说的是@CamiloTerevinto给出的链接,它描述了如何对泛型类型使用反射。
    
    Type type = ...;
    WhichTypeShouldWeUseHere list = ListFromType(type);