【发布时间】:2015-08-27 13:45:16
【问题描述】:
我的实体框架上下文中有一个Employees DbSet,可以这样查询:
IQueryable employees = _context.Employees;
想法是使用反射执行以下方法:
var result= _context.Employees.FirstOrDefault()
我想使用 REFLECTION 查询 FirstOrDefault 的上下文。
var firstordefault = typeof(Queryable).GetMethod("FirstOrDefault", BindingFlags.Static | BindingFlags.Public);
当我执行上面的代码时,它给了我错误:
发现不明确的匹配项
System.Reflection.AmbiguousMatchException 未被用户代码处理
HResult=-2147475171 消息=找到不明确的匹配。源=mscorlib 堆栈跟踪: 在 System.RuntimeType.GetMethodImpl(字符串名称,BindingFlags bindingAttr,Binder binder,CallingConventions callConv,Type[] 类型, ParameterModifier[] 修饰符) 在 System.Type.GetMethod(字符串名称,BindingFlags bindingAttr) 在 e:\Projects\Tests\test_dynamic.cs:line 70 InnerException 中的 Tests.test_dynamic.TestMethod2():
如何解决此方法的歧义。
【问题讨论】:
-
FirstOrDefault有两个重载。您需要传递参数类型。使用泛型,这很棘手。 -
调用方法为:var firstordefault = typeof(Queryable).GetMethod("FirstOrDefault", BindingFlags.Static | BindingFlags.Public,null,new Type[] { typeof(Queryable) },null) ;也没有工作。它返回 null
-
为什么需要这个?试着解释一下这个要求背后的原因......
-
它是我之前帖子的扩展:stackoverflow.com/questions/30775756/… 我只会在运行时知道该对象
标签: c# entity-framework reflection