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

使用
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) 

注意:computernames是List< String> ,ComputerName是ComputerDetail的一个属性,它是一个表示LinqToSQL中的视图的类

最佳答案 如果它是LINQ to SQL,则不希望组合两个委托 – 您希望组合两个表达式树.否则,您的所有过滤都将在客户端完成.

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

如果您真的需要委托表单,则可以使用相同的代码并仅更改所有签名以使用委托而不是表达式树.

点赞