gpt4 book ai didi

c# - 如果您有一个使用 Select() 方法的 LINQ 语句,是否有办法从下一条记录中获取值?

转载 作者:行者123 更新时间:2023-11-30 19:42:52 27 4
gpt4 key购买 nike

我有以下 LINQ 语句:

IEnumerable<Statement> statement = bookmarkCollection.AsEnumerable().Select(
bookmark => new Statement()
{
Title = bookmark.Title,
PageNumber = bookmark.PageNumber
});

声明有另一个名为 NextPageNumber 的属性,我需要能够填充它。 NextPageNumber 等于下一条记录的 PageNumber 减 1。本质上是这样的:

IEnumerable<Statement> statement = bookmarkCollection.AsEnumerable().Select(
bookmark => new Statement()
{
Title= bookmark.Title,
PageNumber = bookmark.PageNumber,
NextPageNumber = ???
});

更新:

我尝试了提供的一些解决方案,但我仍在使用 .NET 3.5,因此 Tuple 方法已失效。 Zip 操作有效(我有模拟 3.5 Zip 的扩展方法),但它不会为最后一个书签创建语句。最后一个书签的 NextPageNumber 就是 PDF 中的页数。

最终更新:

非常感谢大家。在您的帮助下,我能够使它正常工作。

最佳答案

这是一个辅助函数,它将一个序列映射到一对序列,其中每一对都是与它后面的项目配对的每个项目。

public static IEnumerable<Tuple<T, T>> WithNext<T>(this IEnumerable<T> source)
{
using (var iterator = source.GetEnumerator())
{
if(!iterator.MoveNext())
yield break;

T previous = iterator.Current;
while (iterator.MoveNext())
{
yield return Tuple.Create(previous, iterator.Current);
previous = iterator.Current;
}

yield return Tuple.Create(previous, default(T));
}
}

现在您可以:

var query = bookmarkCollection.AsEnumerable()
.WithNext()
.Select(pair => new Statement(){
Title= pair.Item1.Title,
PageNumber = pair.Item1.PageNumber,
NextPageNumber = pair.Item2.PageNumber - 1, //note you'll need to null check for the last item
});

关于c# - 如果您有一个使用 Select() 方法的 LINQ 语句,是否有办法从下一条记录中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com