动态EF查询

时间:2014-09-09 14:23:17

标签: entity-framework

我正在考虑设计一个业务规则引擎,它基本上从存储在数据库中的一组字符串值生成EF查询。

例如我将存储连接字符串,表名,where条件谓词,并选择谓词作为数据库中的字符串字段,并希望动态构造EF查询。例如,

var db = new DbContext(“connectionstring”);

var wherePredicate = Expression.FromString(“p => p.StartDate > new DateTime(2014,5,1))
var selectPredicate = Expression.FromString(“p => p”)

var results = db.Set(“Projects”).Where(wherepredicate).Select(selectPredicate)

为了构造谓词,我可以使用DynamicExpression或Dynamic LINQ库。

但是,如何访问db.Set(“Projects”),其中Projects是实体名称并应用where和select谓词? (或类似db[“Projects”].Where().Select)。

我尝试了DbContext.Set(Type entityttype)方法的非泛型版本,但无法弄清楚如何将WhereSelect谓词应用于返回的对象。

我试图避免生成SQL查询,而是依赖于动态生成的EF代码。

1 个答案:

答案 0 :(得分:0)

这没有多大意义。您可以使用反射创建适用于string而非通用类型的方法,但您必须返回DbSet而不是DBSet<T>。在那个上你不能执行LINQ的方法(基本上),因为没有类型(在编译期间)。当然你可以用反射一直这样做,但那么,为什么???您已经失去了90%的 O / R映射器为您做的事情。