【问题标题】:Help converting foreach to Linq帮助将 foreach 转换为 Linq
【发布时间】:2009-11-25 15:55:14
【问题描述】:

这是一道作业题。

我正在对我们的域模型进行差异分析,并且我已经对其进行了设置,以便我可以迭代一个操作列表,以检查域内的某些差异。我传入差分函数和对象图的前后状态以在 DiffContext 中生成结果——稍后用于设置调用另一个服务的有效负载。但我做了一些更改,需要 Linq 语法方面的帮助

所以,我有以下代码...

public static IEnumerable<DiffContext> GetFirstDifference<T>(IEnumerable<Func<T, T, DiffContext>> diffOperations, T beforeState, T afterState)
{
    return from op in diffOperations
           let diff = op(beforeState, afterState)
           where diff.FoundDifference
           select diff;
}

我修改为使用Func&lt;T, T, IEnumerable&lt;DiffContext&gt;&gt; 而不是以前的Func&lt;T, T, DiffContext&gt; - 因为现在我的差异操作可以返回多个差异。就这样..

public static IEnumerable<DiffContext> GetFirstDifference<T>(IEnumerable<Func<T, T, IEnumerable<DiffContext>>> diffOperations, T beforeState, T afterState)
{
    foreach (var op in diffOperations)
    {
        foreach (var diff in op(beforeState, afterState))
        {
            yield return diff;
        }
    }
}

但是现在我有了这个嵌套的 foreach,我希望有人帮助我将它转换为 Linq 等价物。你能帮忙吗?

感谢乔恩·斯基特。我现在有以下内容,而不是嵌套的 foreach:

    return from op in diffOperations
           from diff in op(beforeState, afterState)
           where diff.FoundDifference
           select diff;

【问题讨论】:

    标签: linq


    【解决方案1】:

    是的 - 你想要two "from" clauses,基本上 - 执行展平操作。这使用SelectMany LINQ 运算符。

    鉴于这是家庭作业,我不愿意发布完整的代码 - 但我会说这是一个三行 LINQ 查询(使用自然换行)。想想你想从每个集合中“得到”什么......

    如果提示不够,只需添加 cmets。

    【讨论】:

      猜你喜欢
      • 2018-11-24
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多