我可以在LINQ对对象中执行“或”操作吗?

时间:2008-10-30 19:30:56

标签: c# linq

在Google中查找LINQ和Or证明有点困难所以我在这里。

我想要以下内容:

(from creditCard in AvailableCreditCards 
where creditCard.BillToName.ToLowerInvariant().Contains(txtFilter.Text.ToLowerInvariant())
**or creditCard.CardNumber.().Contains(txtFilter.Text)**
orderby creditCard.BillToName
select creditCard)

3 个答案:

答案 0 :(得分:7)

支持LINQ的C#关键字仍然是C#。将where视为有条件的if;您以相同的方式执行逻辑操作。在这种情况下,使用||

进行逻辑或运算
(from creditCard in AvailableCreditCards 
 where creditCard.BillToName.ToLowerInvariant().Contains(
             txtFilter.Text.ToLowerInvariant())  
 || creditCard.CardNumber.().Contains(txtFilter.Text) 
orderby creditCard.BillToName 
select creditCard)

答案 1 :(得分:3)

您可以使用.Where()函数来完成此任务。

var cards = AvailableCreditCards.Where(card=> card.CardNumber.Contains(txtFilter.Text) || card.BillToName.ToLowerInvariant().Contains(txtFilter.Text.ToLowerInvariant());

答案 2 :(得分:1)

您应该使用适合您语言的布尔运算符。管|适用于C#

这是单曲的msdn 这是双管道上的msdn ||

双管的处理是它短路(如果左表达式为真,则不运行正确的表达式)。许多人只使用双管,因为他们从未学过单管。

双管道的短路行为会产生分支代码,如果在右侧运行表达式会产生副作用,这可能会非常糟糕。

我更喜欢linq查询中的单个管道的原因是 - 如果查询有一天在linq到sql中使用,那么两个c#的OR运算符的底层转换就是sql的OR,它就像单个管道一样运行。