如何使用 LINQ 从多个序列进行投影?

How to project from several sequences using LINQ?

全部

我有三个合集:

{"Alex", "Anna"}
{19, 20}
{"A", "B"}

我想使用 LINQ 和以下 lambda 或其他东西将它们全部投影到一个 "Student" 类型的对象序列中:

(name, age, grade)=>new Student(name, age, grade)

结果应该是两个 Student 对象 ("Alex", 19, "A") 和 ("Anna", 20, "B")

我该怎么做?

您可以组合两个 Zip 来实现此目的:

names.Zip(ages, (n,a) => new { name = n, age = a })
     .Zip(grades, (s,g) => new Student { Name = s.name, Age = s.age, Grade = g });

我会用 Zip

var names = new[] {"Alex", "Anna"};
var ages = new[] {19, 20}
var grades = new[] {"A", "B"}


var students = names.Zip(ages, (n, a) => Tuple.Create(n, a))
                    .Zip(grades, (t, g) => new Student(t.Item1, t.Item2, g));