【问题标题】:How to convert this nested foreach in lambda/Linq expression [closed]如何在 lambda/Linq 表达式中转换这个嵌套的 foreach [关闭]
【发布时间】:2015-08-24 02:03:24
【问题描述】:

如何在 lambda/Linq 表达式中转换这个嵌套的 foreach 以简化代码? 如何在 lambda/Linq 表达式中转换这个嵌套的 foreach 以简化代码?

LinkButtonContinue.Enabled = false;
foreach (OrderItem orderItem in order.OrderItemList)
{
    if (orderItem.OrderItemCommitAction.Equals(OrderItemCommitAction.Modify) ||
        orderItem.OrderItemCommitAction.Equals(OrderItemCommitAction.Cancel))
    {
        LinkButtonContinue.Enabled = true;
        break;
    }
    else
    {
        foreach(OrderItem orderItemSLot in orderItem.OrderItemSlotList)
        {
            if (orderItemSLot.OrderItemCommitAction.Equals(OrderItemCommitAction.Modify) ||
            orderItemSLot.OrderItemCommitAction.Equals(OrderItemCommitAction.Cancel))
            {
                LinkButtonContinue.Enabled = true;
                break;
            }
            else 
            {
                LinkButtonContinue.Enabled = false;
            }
        }
    }
}

【问题讨论】:

  • 我在这里看不到任何 LINQ 或 lambda。你在寻找什么样的“简化”?请提供a good, minimal, complete code example,清楚地说明您的问题,并详细、准确地说明该代码的不满意之处以及您希望如何解决该问题。

标签: c# linq lambda


【解决方案1】:
Func<OrderItem, bool> condition = 
    x => x.OrderItemCommitAction == OrderItemCommitAction.Modify ||
         x.OrderItemCommitAction == OrderItemCommitAction.Cancel;

LinkButtonContinue.Enabled =
    order.OrderItemList.Any(x => condition(x)) ||
    order.OrderItemList
         .SelectMany(x => x.OrderItemSlotList)
         .Any(x => condition(x));

编辑:

根据@Mephycomment

F(x => g(x)) 等价于 F(g)

因此:

.Any(x => condition(x))

可以缩短为:

.Any(condition)

【讨论】:

  • 由于更高级的类型推断和管道 (|&gt;) 运算符,在 F# 中看起来更好(就像几乎所有其他东西一样)
  • 为什么要投反对票?
  • 它将为某些输入返回不同的结果,因为在初始代码中,一旦结果设置为true,它可能会在外部foreach循环的下一次迭代中再次设置为false。但我相信这是您的解决方案意外修复的初始代码中的错误。
  • F(x =&gt; g(x)) 等价于F(g)
  • @Mephy 我知道,但我想以明确的方式为 OP 展示这一点
猜你喜欢
  • 2016-07-13
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多