当前位置:  开发笔记 > 编程语言 > 正文

实体框架动态Where子句

如何解决《实体框架动态Where子句》经验,为你挑选了1个好方法。

我有一个查询:

var function = GetSomeExpression();    

using (FooModel context = new FooModel())
{
    var bar = context.Bar.Where(function);
}

我想创建一个可以在上下文中针对不同实体执行Where的泛型方法.目标不是必须做context.Bar.Where,context.Car.Where,Context.Far.Where等.

一些无法做到的事情,但说明了目标是:

var q = context.GetObjectContext(T).Where(queryFunction);

我已经研究过使用Relfection并且可以获取Where方法,但是不知道如何针对在委托中传递的上下文执行它.我也看过DynamicMethod,但做整个IL事情并不喜欢吸引人.

到目前为止我所拥有的:

private List GetResults(Expression> queryFunction)
{
    // note: first() is for prototype, should compare param type
    MethodInfo whereMethod = typeof(Queryable).GetMethods()
        .Where(m => m.Name == "Where")
        .First().MakeGenericMethod(typeof(T)); 

    // invoke the method and return the results
    List result = whereMethod.Invoke(
    // have the method info
    // have the expression
    // can reference the context 
    );

    throw new NotImplementedException();
}

这可能吗?



1> blu..:

这比我之前尝试的方式更容易:

private List GetResults(IQueryable source, 
    Expression> queryFunction)
{
   return source.Where(queryFunction).ToList();
}

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有