我有Class1
喜欢:
{
string Name,
string Sex
}
我有一个List<Class1>
有100个项目,其中50个是男性,50个是女性,我如何获得10组5Males和5个女性各有LINQ?
我已经设法将列表分为10组但不按性别平均分配。
var foo = My100List.Select((person, index) => new {person, index})
.GroupBy(x => x.index%10)
.Select(i => new Group
{
Name= "Group" + i.Key,
Persons= i.Select(y => y.person).ToList()
});
上面的代码不是按性别分发的。
答案 0 :(得分:2)
试试这个(未经测试):
int groupSize = 5;
var foo = My100List.GroupBy(x => x.Sex)
.SelectMany(g => g.Select((x, i) => new { Person = x, Group = i / groupSize}))
.GroupBy(x => x.Group)
.Select(g => new Group
{
Name = "Group" + g.Key,
Persons = g.Select(x => x.Person).ToList()
});
修改强>
经过测试和确认。上面的代码可以使用。
答案 1 :(得分:-1)
在.OrderBy
.Select
经过测试和工作:
var foo = My100List.OrderBy(p => p.Sex).Select((person, index) => new {person, index})
.GroupBy(x => x.index%10)
.Select(i => new Group
{
Name= "Group" + i.Key,
Persons= i.Select(y => y.person).ToList()
});