关于IQueryable FirstOrDefault()的思考

时间:2015-06-11 17:51:49

标签: c# entity-framework reflection

我的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:

如何解决此方法的模糊性。

1 个答案:

答案 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<>));