将当前项目馈送到LINQ查询中的下一个项目

本文关键字:项目 查询 下一个 LINQ | 更新日期: 2023-09-27 18:20:04

我有一个要转换的项目集合(基本上是包装元数据)。对于集合中的第一个项目,我只需将必要的元数据封装在该项目上,就完成了。第二项的元数据依赖于前一项的元数据,所以我想将第一项的元数据传递给第二项。

以下。。。。

object[] A;
A.skip(1)
 .Zip( A, (first, second), a => new Metadata( first, second ) );

将不起作用,因为它使用CCD_ 1而不是CCD_。到目前为止,我看到的所有其他解决方案都是如此(传递原始对象,而不是Select()函数的结果)。

如何将LINQ查询中第一个项目的Select()的结果输入到第二个项目的Select()中?

我知道我可以使用for循环来实现这一点,但我想知道是否没有更实用的方法来处理这类问题。函数式语言(如F#)中一定有一个解决方案,我想知道是否可以将其转换为C#中的LINQ解决方案。一个单一的解决方案将是特别棒的。

通过像这样将元数据链接在一起,我可以将重要信息从一个项传递到以下所有项,例如标志或上下文。最终,目标不仅仅是了解前一个项目,而是了解当前项目的整个上下文。然后,当前项目可以更改以下所有项目的上下文等。

将当前项目馈送到LINQ查询中的下一个项目

尝试.Aggregate()

var data = A.Aggregate(new Metadata(null, A), (meta, a) => new Metadata(meta, a));

我不会保证我有正确的语法,尤其是你的代码。不过,这个想法应该很清楚,如果你在一个更彻底的例子中进行编辑,我可以对此进行扩展。

在函数式编程语言中,这种行为通常使用scan或类似函数来完成。在F#中,你可以这样做:

originalSequence |> Seq.scan (fun (prev, current) -> Some <| new Metadata( (* ... stuff ... *) )) None

有关C#中Scan扩展方法的实现,请参阅此问题。给定该方法,您可以实现如下查询:

A.Scan((previous, current) => new Metadata(/* ... */), null)

但是,我想不出object0方法的优雅的一行实现。