假设我有一个包含多个可以为空的外键的表。
在我的业务逻辑中,我必须为每种情况编写不同的查询,因为外键条件每次都不同,如下所示:
var q1 =
from c in container.Stuff
where c.fk1 = pk1id
select c;
var q2 =
from c in container.Stuff
where c.fk2 = pk2id
select c;
等等,这相当于很多代码重复和许多额外的东西要考虑(这个表中有10个这样的fks),所以40个{C,R,U,D}方法可以跟踪,来源的不同分支。
此外,在多个表中重复这一事实并创建维护噩梦。
我在想,有什么方法可以概括这个吗?有没有办法让这些查询更具动态性?如果是这样,我应该从哪里开始寻找?我真的没有看到泛型适合这里,所以是否有其他一些结构使这更抽象?
为了使这个更具体,一些类似psuedo的代码使这更具体......
List<Stuff> ReadStuff(Type owningEntityType, int fkId)
{
// Now I would somehow have to infer (perhaps by adding more info to the method signature) what column to put the where clause on and create an EF query based on that...
// So how would I go from owningEntityType (or some textual description), to a 'real' field
}
答案 0 :(得分:2)
这个怎么样:
public IQueryable<T> GenerateResultSet<T>(
Expression<Func<T, bool>> predicate) where T : BaseEntity
{
return dbContext.Set<T>().Where(predicate);
}
您可以像这样使用它:
var q1 = GenerateResultSet<Stuff>(c => c.fk1 == pkId);
var q2 = GenerateResultSet<Stuff2>(c => c.fk2 == pkId2);