这个表达式如果不生成SQL,那简单:
Get(u=>(u.name != null && u.name == "test") &&(或者||) (u.type != nul && u.type == "type"))
假如,想变成SQL 。。。。那么就难度大点,需要自己构造一个Expression,因为上面我写的表达式可能在生成SQL的时候有问题。
嗯。是生成sql。。
现在的做法是在方法里面
var q = _repository.Table;
if (!string.IsNullOrEmpty(username))
{
q = q.Where(i => i.username == username);
}
这样的话,每次参数都要方法里面。参数经常变,维护性就差了。不知道如何在外面构造这个表达式~~
@sdf333: 我给你的那个连接就支持这个动态构建EXPRESSION。
参考那个做,肯定不会有问题,只是会复杂点。
另外一个方案是:检测所有可能条件,对每个可能都单独生成表达式:
Expression<Func<TEntity, bool>> exp;
if(!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(date))
{
exp = u=>u.name == name && u.type == type && u.date == date;
}
else if(!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(type))
{
exp = u=>u.name == name && u.type == type;
}
//...后面还有很多。这个方案虽然能达到目的,显然是不可行的。但可以做个简单的简化。
@笨笨蜗牛:
非常感谢