C# 动态类型列表的查询实体框架

C# 动态类型列表的查询实体框架,c#,entity-framework,generics,reflection,C#,Entity Framework,Generics,Reflection,查询给定类型的所有对象的实体框架时,您将执行以下操作: List<MyDesiredObjects> = _myContext.MyDesiredObjects.ToList(); MethodInfo method = typeof(BaseXmlReader) .GetMethod("GetFromEF", BindingFlags.Instance | Bind

查询给定类型的所有对象的实体框架时,您将执行以下操作:

List<MyDesiredObjects> = _myContext.MyDesiredObjects.ToList();
MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
BaseXmlReader instance = new BaseXmlReader();
MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo gMethod = method.MakeGenericMethod(typeof(ucm.MappingType));
var result = gMethod.Invoke(instance, null);
失败,对象引用未设置为对象的实例。我甚至还没来得及翻页我的名单


还有其他方法解决此问题吗?

要解决使用null
MethodInfo方法的问题,请执行以下操作:

GetMethod
将只搜索公共成员。您可以将方法更改为public,或包括以下非public方法:

List<MyDesiredObjects> = _myContext.MyDesiredObjects.ToList();
MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
BaseXmlReader instance = new BaseXmlReader();
MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo gMethod = method.MakeGenericMethod(typeof(ucm.MappingType));
var result = gMethod.Invoke(instance, null);
另外,我假设您的GetFromEF方法位于一个名为BaseXmlReader的类上?如果不是,则需要将其替换为类名

然后您可以这样调用:

List<MyDesiredObjects> = _myContext.MyDesiredObjects.ToList();
MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
BaseXmlReader instance = new BaseXmlReader();
MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo gMethod = method.MakeGenericMethod(typeof(ucm.MappingType));
var result = gMethod.Invoke(instance, null);
或者像这样从内部调用:

MethodInfo method = typeof(BaseXmlReader)
                       .GetMethod("GetFromEF", 
                                  BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo gMethod = method.MakeGenericMethod(typeof(ucm.MappingType));
var result = gMethod.Invoke(this, null);

你从哪里得到例外?是在调用该方法还是在GetFromEF中?它位于method.MakeGenericMethod上-但我刚刚发现这是因为该方法为null。调用泛型方法的一种方法如下:
var list=GetFromEF()无需进入反射。您可能需要向GetMethod提供这些绑定标志,以使其能够获取您的私有方法BindingFlags.NonPublic | BindingFlags.instance调用的第一个参数需要是BaseXmlReader的实例,您不能在空实例上调用它,因此调用是gMethod.invoke(这个,空)…但校长是一样的。谢谢!