Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询,按属性组按顺序对非组对象之间的对象进行计数_C#_Linq_Lambda - Fatal编程技术网

C# LINQ查询,按属性组按顺序对非组对象之间的对象进行计数

C# LINQ查询,按属性组按顺序对非组对象之间的对象进行计数,c#,linq,lambda,C#,Linq,Lambda,我有一个对象列表,其中包含序列号属性(Seq)和InnerText属性(以及其他属性)。对象是文本文件中的记录(行) 某些InnerText以“X”开头的记录后面有一个或多个以“Y”开头的连续记录。我想将延续记录中的信息添加到“X”记录对象中 对于每个“X”记录,我需要获得在非“Y”记录的下一个实例处停止的后续“Y”记录的计数 我需要一种方法来计算x.Seq记录和下一个非“Y”记录之间的“Y”记录 以下是迄今为止我对错误的LINQ语句的看法: public class File { pu

我有一个对象列表,其中包含序列号属性(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...                            
    }
}
公共类文件
{
公共队列记录{get;set;}
}
公开课记录
{
公共int Seq{get;set;}
公共字符串InnerText{get;set;}
}
foreach(记录中的记录)
{
int recSeq=记录顺序;
列出记录=记录;
int numberOfYRecsFollowingX=aCopyOfRecords
.Contains(元素=>element.InnerText
.StartsWith(“Y”)&(element.Seq>recSeq)).Count();
对于(int i=(recSeq+1);i<(recSeq+numberOfYRecsFollowingX);i++)
{
做工作添加字段等。。。
}
}
提前感谢您的帮助

您可以使用和方法

这将为您提供以
X
开头的特定记录之后的
Y
记录。要获得计数,只需使用
count
。如果要在列表中插入新项目,请使用以下方法:

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

aCopyOfRecords.Insert(aCopyOfRecords.IndexOf(record) + count, newItem);