对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:

如何解决此方法的歧义。

对IQueryable FirstOrDefault()的反思

若要解决这种歧义,可以使用 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<>));