将代理与OR运算符组合在一起

时间:2011-09-28 13:33:20

标签: c# lambda

使用LinqToSQL在两个不同的表中查找值,并根据结果集中的内容组合结果。

我如何根据给定条件组合两个Func

 // a filter for a LinqToSQL query:
 Func<ComputerDetail, bool> filter;

 // declare the default filter
 filter = x => x.ComputerName.Contains(searchTerm);

然后如果满足条件它想将下面的lambda添加到上面的lambda:

 x => computernames.Contains(x.ComputerName)

因此它们都会导致:

 x => computernames.Contains(x.ComputerName)) ||
      x.ComputerName.Contains(searchTerm);

使用plus运算符创建多播委托几乎就是这样做的, 但是,在这种情况下,我不确定如何应用OR (||):

 filter += computernames.Contains(x.ComputerName) 

注意: computernamesList<String>ComputerNameComputerDetail的属性,它是表示中的视图的类LinqToSQL

1 个答案:

答案 0 :(得分:2)

如果它是LINQ to SQL,您不希望组合两个委托 - 您想要组合两个表达式树。否则,您的所有过滤都将在客户端完成。

如果是这种情况,我相信你基本上只需要PredicateBuilder - 使用predicate1.Or(predicate2)来组合两个谓词。

如果确实想要委托表单,您可以使用相同的代码,只需更改所有签名即可使用委托而不是表达式树。