LINQ查询按非组对象之间的属性组顺序计数对象

本文关键字:对象 属性 顺序 之间 查询 LINQ | 更新日期: 2023-09-27 18:02:16

我有一个具有序列号属性(Seq)和InnerText属性(除其他外)的对象列表。对象是文本文件中的记录(行)。

一些InnerText以'X'开头的记录后面有一个或多个以'Y'开头的延续记录。我想将延续记录中的信息添加到'X'记录对象。

对于每个'X'记录,我需要获得后续'Y'记录的计数,停止在非'Y'记录的下一个实例。

我需要一种方法来计算x.Seq记录和下一个非'Y'记录之间的'Y'记录。

下面是我到目前为止对错误的LINQ语句的处理:

public class File
{
    public Queue Records { get; set;}
}
public class Record
{
     public int Seq { get; set; }
     public string InnerText { get; set; }
}
foreach (Record record in Records)
{
    int recSeq = record.Seq;
        List<Record> aCopyOfRecords = records; 
        int numberOfYRecsFollowingX = aCopyOfRecords
        .Contains(element =>element.InnerText
        .StartsWith("Y") && (element.Seq > recSeq))).Count();
        for (int i = (recSeq + 1); i < (recSeq + numberOfYRecsFollowingX); i++)
    {
                Do Work adding fields etc...                            
    }
}

提前感谢您的帮助

LINQ查询按非组对象之间的属性组顺序计数对象

可以使用SkipWhileTakeWhile方法

aCopyOfRecords
.SkipWhile(x => x != record)
.Skip(1)
.TakeWhile(x => x.InnerText.StartsWith("Y"));

这将为您提供Y记录,该记录位于以X开头的特定记录之后。为了获得计数,只需使用Count。如果您想在列表中插入新项目,请使用List<T>.Insert方法:

var count =  aCopyOfRecords
           .SkipWhile(x => x != record) 
           .Skip(1)
           .TakeWhile(x => x.InnerText.StartsWith("Y"))
           .Count();
aCopyOfRecords.Insert(aCopyOfRecords.IndexOf(record) + count, newItem);