构造动态where子句,Linq To Sql
作者:互联网
我先使用EF Code 4.2,
当需要动态构建where子句时,您提出什么样的解决方案?
但是将非常需要包含功能:
var results = db.Set<dynamicType>.Where("dynamic conditions").Include("....");
上面的动态条件需要查找另一个表以过滤记录:
如果我想用Linq表达式编写它,则将类似于:
var result = db.Set<Contact>().Where(c=>c.AccountId == _Id_param || db.Set<LinkTable>().Any(a=>a.FkFieldId == c.AccountId && a.ParentId == _Id_param)).Include("Quotes");
我基本上需要上述表达式的动态linq,因为对于不同的类型,Where子句字段会发生变化(Contact仅是示例),例如,在一个模型中,FK字段可能是“ AccountId”,而在另一个模型中,它需要是“ AccountFKId” ”.因此,Where子句必须是动态的!
解决方法:
IQueryable是可组合的,因此您可以即时构建查询:
var query = db.Set<Contact>().Include(...);
if (something)
{
query = query.Where(...);
}
// Other wheres
Linq是强类型的,因此您至少总是必须知道要在Set<>中以哪种类型开始.呼叫.您可以使它通用而不是动态的(除非您要通过反射完整地编写它).
您可以使用dynamic linq定义字符串条件的位置,但是再次,您至少必须知道Set<>的类型.
标签:entity-framework-4,linq-to-entities,where-clause,c,entity-framework 来源: https://codeday.me/bug/20191101/1987177.html