C# 使用linq解析包含分层项的文本文件

C# 使用linq解析包含分层项的文本文件,c#,linq,C#,Linq,我正在重写一些代码,并尽可能使用Linq。我现在的问题是一个简单的文件导入函数 该文件基本上如下所示: A1 B1|1882 C1|7315808907578 B9 B1|1883 C1|4025595431639 C1|8717734091786 C1|8717734091809 C1|8717734098280 C1|8717795041874 C1|8717795060998 C1|8717795108973 B9 B1|1884 C1|4025595732071 C1|731580888

我正在重写一些代码,并尽可能使用Linq。我现在的问题是一个简单的文件导入函数

该文件基本上如下所示:

A1
B1|1882
C1|7315808907578
B9
B1|1883
C1|4025595431639
C1|8717734091786
C1|8717734091809
C1|8717734098280
C1|8717795041874
C1|8717795060998
C1|8717795108973
B9
B1|1884
C1|4025595732071
C1|7315808887184
C1|8717734001983
B9
A9
line = reader.ReadLine();
string itemNo = "";
List<AltItems> list = new List<AltItems>();
while (line != null) {
    posts = line.Split(postSep);
    if (posts.Length == 0) { }
    else if (posts[0].Equals("A1")) { }
    else if (posts[0].Equals("B1"))
        itemNo = posts[1];
    else if (posts[0].Equals("C1")) {
        string altItemNo = posts[1];
        list.Add(new AltItems() { ItemNo = itemNo, AltItemNo = altItemNo });
    }
    line = reader.ReadLine();
}
现有代码如下所示:

A1
B1|1882
C1|7315808907578
B9
B1|1883
C1|4025595431639
C1|8717734091786
C1|8717734091809
C1|8717734098280
C1|8717795041874
C1|8717795060998
C1|8717795108973
B9
B1|1884
C1|4025595732071
C1|7315808887184
C1|8717734001983
B9
A9
line = reader.ReadLine();
string itemNo = "";
List<AltItems> list = new List<AltItems>();
while (line != null) {
    posts = line.Split(postSep);
    if (posts.Length == 0) { }
    else if (posts[0].Equals("A1")) { }
    else if (posts[0].Equals("B1"))
        itemNo = posts[1];
    else if (posts[0].Equals("C1")) {
        string altItemNo = posts[1];
        list.Add(new AltItems() { ItemNo = itemNo, AltItemNo = altItemNo });
    }
    line = reader.ReadLine();
}
line=reader.ReadLine();
字符串itemNo=“”;
列表=新列表();
while(行!=null){
posts=行分割(postSep);
如果(posts.Length==0){}
else if(posts[0].Equals(“A1”){}
else if(posts[0]。等于(“B1”))
项目编号=员额[1];
else if(posts[0]。等于(“C1”)){
字符串altItemNo=posts[1];
添加(新的AltItems(){ItemNo=ItemNo,AltItemNo=AltItemNo});
}
line=reader.ReadLine();
}

等效的Linq查询是什么样子的?关于使用Linq重写此代码的性能损失,您有什么想法吗?我也有多层次的文件,其中第一层次的项目数据需要用于构建第三层次的项目…

我同意Ahmed ilyas的观点。在LINQ中重写所有内容并不意味着它工作得更快

特别是关于字符串解析,您应该知道它在LINQ中不受支持。如果您认为LINQ是一种以统一方式针对多种数据源的查询语言,那么这是绝对合理的。有很多方法可以做到这一点,但它们总是过于间接,我并不特别喜欢它们。其中一个,是使用Scott Guthry的图书馆,就像它建议的那样

请注意,我只向您展示了一种使用LINQ进行字符串解析的方法这并不意味着我建议使用LINQ替换条件代码。


希望我能帮忙

“层次”部分不清楚。但是,如果在枚举过程中需要访问集合的不同索引,LINQ并不是最佳工具。仅仅因为代码有效并不意味着您应该将所有内容都转换为LINQ—这对您来说毫无意义。LINQ实际上是为数据库语言和编程语言设计的,在用LINQ编写时有一定的意义。我并不是说LINQ是一种在.NET框架上执行的DB语言。您将获得与现在相同的性能和输出。由于您需要向前传递上下文(
itemNo
altItemNo
),因此不太可能获得美观的LINQ语句。考虑在聚合过程中使用聚合来承载上下文。