0

我有两个课程,例如:

public class Person
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class Vampire
    {
    public long Id { get; set; }
}

然后,我有两个列表,一个人员列表和一个吸血鬼列表。所有的吸血鬼都是人。

我需要的是两个儿童名单,感染者和未感染者。我正在使用 for 构建两个列表,但我知道可以使用 linq 或其他东西。

有什么帮助吗?

4

4 回答 4

3

像这样的东西:

var vampireIds = new HashSet<long>(vampireList.Select(x => x.Id));
var infectedPersons = personList.Where(x => vampireIds.Contains(x.Id));
var regularPersons = personList.Where(x => !vampireIds.Contains(x.Id));
于 2012-04-10T21:40:11.993 回答
1

我会选择以下内容:

void Main()
{
    var list = new List<Person>(){ new Person(){ Id = 1 }, new Vampire(){ Id = 2 } };
    var infected    = list.Where (x => x is Vampire);
    var notInfected = list.Except(infected);
}

public class Person
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class Vampire : Person
{
}
于 2012-04-10T21:51:17.847 回答
0

如果只有一个人可以是吸血鬼,你可以从 Person 继承 Vampire,然后遍历所有的人,看看他们是否是吸血鬼;如果是 -> 添加到吸血鬼列表,否则添加到非吸血鬼列表。

于 2012-04-10T21:41:54.527 回答
0

尝试这个:

var people = new List<Person>
             {
                 new Person {Id = 1, Name = "John"},
                 new Person {Name = "Dave", Id = 2},
                 new Person {Id = 3, Name = "Sarah"}
             };

var vamps = new List<Vampire> {new Vampire {Id = 1}};

var theInfected = people.Where(p => vamps.Select(v => v.Id).Contains(p.Id));

var theAfraid = people.Except(theInfected);

foreach (var person in theInfected)
   {
       System.Console.WriteLine(person.Name + " Is Infected!");
   }

foreach (var person in theAfraid)
  {
     System.Console.WriteLine(person.Name + " Is Afraid!");
  }

希望它有帮助。

于 2012-04-10T21:51:19.377 回答