我的Entity Framework上下文中有一个Employees DbSet,可以查询为:
IQueryable employees = _context.Employees;
想法是使用Reflection:
执行以下方法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(String name,BindingFlags bindingAttr,Binder binder,CallingConventions callConv,Type []类型, ParameterModifier []修饰符) 在System.Type.GetMethod(String name,BindingFlags bindingAttr) 在e:\ Projects \ Tests \ test_dynamic.cs中的Tests.test_dynamic.TestMethod2():第70行InnerException:
如何解决此方法的模糊性。
答案 0 :(得分:0)
要解决此歧义,您可以按照此answer中的说明使用Linq查询:
MethodInfo mi = typeof(Queryable)
.GetMethods(BindingFlags.Public | BindingFlags.Static)
.First(x => x.Name == "FirstOrDefault" &&
x.GetParameters().Length == 1 &&
x.GetParameters()[0].ParameterType.GetGenericTypeDefinition() == typeof(IQueryable<>));