这个问题在这里已有答案:
我有一个像这样构建的表达式树
Expression<Func<User, bool>> match = o =>
o.Name == viewModel.Name
&& orders.Contains(o.User.Company.CompanyId.ToString())
&& o.dept == viewModel.dept
我只想包括这条线
o.dept == viewModel.dept
当viewModel.dept为1,2或3且表达式树中不包含此条件时,如果它是任何其他值。
此代码位于一个函数中,该函数将viewModel作为参数,viewModel中的值用于查询EF模型User。
目前我有2个独立的表达式树来满足这种情况。有没有更好的解决方案?
谢谢
我终于使用LINQKit(https://github.com/scottksmith95/LINQKit)和它的PredicateBuilder得到了一个优雅的解决方案。这就是我所做的。
var match = PredicateBuilder.New<User>(true);
match = match.And(o => o.Name == viewModel.Name);
match = match.And(o =>orders.Contains(o.User.Company.CompanyId.ToString()));
if(viewModel.dept==1 || viewModel.dept == 2 || viewModel.dept==3)
{
match = match.And(o=>o.dept == viewModel.dept);
}
return match;