使用List <Person> Distinct()返回2个值

Jon*_*Jon 2 .net c# linq ienumerable c#-3.0

我有一个Person班级,有NameAreaID属性.

public class Person
{
   public string Name;
   public int AreaID;

   // snip
}
Run Code Online (Sandbox Code Playgroud)

我有List<Person>可能在列表中有数百个Person对象.例如,AreaID = 1的100人和AreaID = 2的100人

我想返回AreaID的不同列表以及有多少人拥有该AreaID.

例如,AreaID = 1 Persons = 100 AreaID = 2 Persons = 100

tva*_*son 6

使用GroupBy方法.

var list = ...list of Persons...

var areas = list.GroupBy( p => p.AreaID )
                .Select( g => new {
                    AreaID = g.Key,
                    Count = g.Count()
                 });
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 5

看起来您想要按区域ID进行分组:

var groups = from person in persons
             group 1 by person.AreaID into area
             select new { AreaID = area.Key, Persons = area.Count() };
Run Code Online (Sandbox Code Playgroud)

我正在使用"组1"来表示我真的不关心每个组中的数据 - 只有计数和密钥.

这是低效的,因为它必须为了分组而缓冲所有结果 - 你能够在.NET 4.0中使用Reactive LINQ来更有效地执行此操作,或者如果你愿意,你当然可以使用Push LINQ.然后,对于相对较小的数据集,它可能无关紧要:)