【问题标题】:Any alternative for this 'Where' LINQ query此 'Where' LINQ 查询的任何替代方法
【发布时间】:2022-01-03 11:18:16
【问题描述】:

我有这个 linq 查询。如果可能的话,我需要为 Where 条件中的这个高亮 lambda 表达式寻找任何好的替代方案。我正在考虑使用合并条件 (??) 但无法进行查询。

.Where(p => p.Property== null ? true : p.Property.SubPropertyList.Contains(Item))

所以,我想从列表中获取属性为 null 或如果不为 null 则满足条件(Contains())的项目

【问题讨论】:

  • 好吧,我会在这里使用|| 而不是条件运算符,但除此之外,除了你已经拥有的东西之外,你还在寻找什么?
  • 也许正在寻找类似p.PalletMission?.Destinations.Contains(currentGtpOrder.GtpStation.Node) ?? true 的东西?不确定它是否比您所拥有的更有意义。
  • 如何反转条件.Where(p => p.PalletMission?.Destinations.Contains(currentGtpOrder.GtpStation.Node) != false),它涵盖了你的空和真情况
  • @JonSkeet 是的,但是你更喜欢什么? p.PalletMission == null ? true : p.PalletMission.Destinations.Contains(currentGtpOrder.GtpStation.Node) 或 p.PalletMission == null || p.PalletMission.Destinations.Contains(currentGtpOrder.GtpStation.Node) 在检查第二个条件时,当属性为空时,第二个不会创建空引用异常吗?
  • @InterStellaR 如果第一个表达式为真,则不会检查第二个表达式。

标签: c# .net linq


【解决方案1】:

您需要创建一个谓词。 将返回 truefalse 的函数。

在你的情况下: .Where(***p => p.PalletMission == null || p.PalletMission.Destinations.Contains(currentGtpOrder.GtpStation.Node))

【讨论】:

    【解决方案2】:
     var result = list
                .Where(p =>p.Property == null || p.Property?.SubPropertyList.Contains(1) == true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-24
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多