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);