我正在考虑设计一个业务规则引擎,它基本上从存储在数据库中的一组字符串值生成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)
方法的非泛型版本,但无法弄清楚如何将Where
和Select
谓词应用于返回的对象。
我试图避免生成SQL查询,而是依赖于动态生成的EF代码。
答案 0 :(得分:0)
这没有多大意义。您可以使用反射创建适用于string
而非通用类型的方法,但您必须返回DbSet
而不是DBSet<T>
。在那个上你不能执行LINQ的方法(基本上),因为没有类型(在编译期间)。当然你可以用反射一直这样做,但那么,为什么???您已经失去了90%的 O / R映射器为您做的事情。