数据库
首页 > 数据库> > 构造动态where子句,Linq To Sql

构造动态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