为了账号安全,请及时绑定邮箱和手机立即绑定

Linq Where()lambda表达式中的“或”等价物

Linq Where()lambda表达式中的“或”等价物

狐的传说 2019-11-12 12:53:23
Linq中是否有一种方法可用于构建“ ... where(a = 1)OR(a = 2)”之类的SQL字符串?
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

您当然可以在Where子句(扩展方法)中执行此操作。但是,如果需要动态构建复杂的查询,则可以使用PredicateBuilder。


 var query = collection.Where( c => c.A == 1 || c.B == 2 );

或使用PredicateBuilder


 var predicate = PredicateBuilder.False<Foo>();

 predicate = predicate.Or( f => f.A == 1 );

 if (allowB)

 {

    predicate = predicate.Or( f => f.B == 1 );

 }


 var query = collection.Where( predicate );


查看完整回答
反对 回复 2019-11-12
?
森林海

TA贡献2011条经验 获得超2个赞

现在,它已内置到.net中,不确定以前是否已建立。给定一个现有的Linq查询,您可以添加一个带字符串数组(SearchStrings)的where子句,并检查它们是否与您要搜索的集合中的任何对象匹配。使用ToLower()只是确保您避免在SQL查询中区分大小写。


query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));

通过将数组中的所有单词与集合的对象匹配,可以对“和”谓词执行相同的操作。


query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));

在此示例中,我与集合中的每个对象相关,而s与SearchStrings数组中的每个字符串相关。


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 1215 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信