【问题标题】:Can I perform an "or" operation in LINQ to objects?我可以在 LINQ to 对象中执行“或”操作吗?
【发布时间】:2008-10-30 19:30:56
【问题描述】:

在 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)

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    支持 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)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您应该使用适用于您的语言的布尔运算符。管道 |在 C# 中工作

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

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

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

        我更喜欢 linq 查询中的单管道的原因是 - 如果查询有一天在 linq to sql 中使用,则 c# 的两个 OR 运算符的底层转换是 sql 的 OR,其操作类似于单管道。

        【讨论】:

        • 那是两个管道,拜托。
        • 我相信一个管道是按位运算符,两个管道是逻辑或运算符。
        • 不知道!很有趣!
        猜你喜欢
        • 2010-11-15
        • 2018-07-24
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多