使用LINQ创建元组列表

时间:2019-04-26 16:45:55

标签: c# linq tuples

我有一些数据文件:

data1.txt:
SchoolAdress1
Surname1;10
Surname2;7

data2.txt:
SchoolAdress2
Surname3;9
Surname4;6

data3.txt:
SchoolAdress3
Surname5;10
Surname6;6

并创建以下类:

class Pupil
{
public string Surname {get; set;}
public int Grade {get; set;}

...
}

我的收藏是:

List<Tuple<string, List<Pupil>>> data;

元组的项目1是学校地址。

我需要使用LINQ List<Tuple<string, List<Pupil>>> results创建一个新列表,其中所有学生的成绩均为10。

最终结果应该是这样的:

results[0]:
SchoolAdress1
Surname1;10

results[1]:
SchoolAdress3
Surname5;10

我的问题是我必须创建一个新的元组Tuple<string, List<Pupil>>。我尝试过:var results = data.Select(list => list.Item2.Where(pupil => pupil.Grade == 10).ToList()).ToList();

1 个答案:

答案 0 :(得分:0)

如果您想坚持使用Tuple的方法,可以进行以下操作:

var filteredData = data.Select(x => new Tuple<string, List<Pupil>>(x.Item1, x.Item2.Where(y => y.Grade == 10).ToList())).ToList();

filteredData现在是一个List<Tuple<string, List<Pupil>>,其中Item2的{​​{1}}部分被Tuple过滤。

如果您要删除Grade == 10的{​​{1}}中0个条目中的所有条目,则可以这样称呼:

List<Pupil>

或者在第一行包含一个Tuple子句,并将其更改为:

filteredData.RemoveAll(x => !x.Item2.Any());

在这里您可以看到它的运行情况:

https://dotnetfiddle.net/BeeNVv