0

我想加入 2 个列表。学生和个人。Student 和 Person 都有 id 和 name 变量,而且 Student 有另一个名为 isStudying 的变量。我想用 isStudying 变量将所有学生加入到 Person 中。

在此处输入图像描述

var persons = new Person { id = 1, name = "John" };
var persons = new Person { id = 2, name = "Ace" };
var persons = new Person { id = 3, name = "Mike" };
var persons = new Person { id = 4, name = "Yob" };
var persons = new Person { id = 5, name = "Ken" };

var students = new Student { id = 2, name = "Ace", isStudying=true };
var students = new Student { id = 3, name = "Mike", isStudying = true };
var students = new Student { id = 5, name = "Ken", isStudying = true };

persons.Addrange(students.where(student.id.contain(persons.id)));
4

3 回答 3

1

这是在 linq 中实现的完整解决方案,使用继承

class Person
{
    public int id { get; set; }
    public string name { get; set; }
}

class Student : Person
{
    public bool isStudying { get; set; }
}

void Main()
{
    var person1 = new Person { id = 1, name = "John" };
    var person2 = new Person { id = 2, name = "Ace" };
    var person3 = new Person { id = 3, name = "Mike" };
    var person4 = new Person { id = 4, name = "Yob" };
    var person5 = new Person { id = 5, name = "Ken" };

    var persons = new List<Person> { person1, person2, person3, person4, person5 };

    var student1 = new Student { id = 2, name = "Ace", isStudying = true };
    var student2 = new Student { id = 3, name = "Mike", isStudying = true };
    var student3 = new Student { id = 5, name = "Ken", isStudying = true };

    var students = new List<Student> { student1, student2, student3 };

    var personsRes = persons.Where(y => students.Select(x => x.id).Contains(y.id));

    Console.WriteLine(personsRes);
}
于 2017-09-29T09:00:02.800 回答
0

尝试这个:

 public class Person
    {
        public int id { get; set; }
        public string name { get; set; }
    }

    public class Student
    {
        public int id { get; set; }
        public string name { get; set; }
        public bool isStudying { get; set; }
    }

    var persons = new List<Person> { new Person { id = 1, name = "John" },
         new Person { id = 2, name = "Ace" },
         new Person { id = 3, name = "Mike"},
         new Person { id = 4, name = "Yob" },
         new Person { id = 5, name = "Ken" } };

        var students = new List<Student> { new Student { id = 2, name = "Ace", isStudying = true },
        new Student { id = 3, name = "Mike", isStudying = true },
        new Student { id = 5, name = "Ken", isStudying = true } };

        var allPersons = (from p in persons
                          join s in students on new { first = p.id } equals new { first = s.id } into sjoin
                          from slj in sjoin.DefaultIfEmpty()
                          select new
                          {
                              id = p.id,
                              name = p.name,
                              isStudying = (slj != null ? (slj.isStudying ? "TRUE" : "FALSE") : string.Empty)
                          }).ToList();
于 2017-09-29T09:38:46.547 回答
0

供未来读者参考,我在评论中使用 LINQ 提供的一个简单答案是:

使用匿名类型:

persons.Select(p => new { p.id, p.name, students.Any(s => s.id == p.id && s.isStudying) });

使用自定义类(Student该类实际上可以重复使用):

persons.Select(p => new Student { id = p.id, name = p.name, isStudying = students.Any(s => s.id == p.id && s.isStudying) });
于 2017-10-03T04:25:28.887 回答