如果动态满足条件,如何添加到linq查询表达式[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个像这样构建的表达式树

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个独立的表达式树来满足这种情况。有没有更好的解决方案?

谢谢

c# entity-framework linq expression expression-trees
1个回答
0
投票

我终于使用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;
© www.soinside.com 2019 - 2024. All rights reserved.