对IQueryable FirstOrDefault()的反思
本文关键字:IQueryable FirstOrDefault | 更新日期: 2023-09-27 17:55:18
我的实体框架上下文中有一个员工数据库集,可以查询为:
IQueryable employees = _context.Employees;
这个想法是使用反射执行以下方法:
var result= _context.Employees.FirstOrDefault()
我想使用反射查询 FirstOrDefault 的上下文。
var firstordefault = typeof(Queryable).GetMethod("FirstOrDefault", BindingFlags.Static | BindingFlags.Public);
当我执行上面的代码时,它给了我错误:
发现不明确的匹配项
System.Reflection.AmbiguousMatchException 未由用户代码
处理 HResult=-2147475171 消息=找到不明确的匹配项。 来源=mscorlib 堆栈跟踪: at System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, 参数修饰符[] 修饰符) at System.Type.GetMethod(String name, BindingFlags bindingAttr) 在Tests.test_dynamic。TestMethod2() in e:''Projects''Tests''test_dynamic.cs:line 70 InnerException:
如何解决此方法的歧义。
若要解决这种歧义,可以使用 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<>));