这是一个家庭作业问题。
我正在对我们的域模型进行差异处理,并且我已经设置了它,以便我可以迭代检查域内的certian差异的操作列表。我传入差异函数以及对象图的前后状态,以在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<T, T, IEnumerable<DiffContext>>
而不是之前的Func<T, T, DiffContext>
- 因为现在我的差异操作可以返回多个差异。像这样......
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等价物。你能帮忙吗?
感谢Jon Skeet。我现在有以下代替嵌套的foreach:
return from op in diffOperations
from diff in op(beforeState, afterState)
where diff.FoundDifference
select diff;
答案 0 :(得分:4)
是的 - 基本上你想要two "from" clauses - 执行展平操作。这使用SelectMany LINQ运算符。
鉴于这是家庭作业,我不愿意发布完整代码 - 但我会说这是一个三行LINQ查询(使用自然换行)。想想你想从“每个系列”中得到什么......
如果这还不够,请添加评论。