【问题标题】:Reflection on IQueryable FirstOrDefault()对 IQueryable FirstOrDefault() 的反思
【发布时间】: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():

如何解决此方法的歧义。

【问题讨论】:

标签: c# entity-framework reflection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多