我有一个俱乐部列表,其中包含会员资产列表。如何获得唯一成员列表?
这就是为什么这个问题与你所建议的重复不同的原因: 这与示例有点不同,因为我的类的一个属性是另一个类 - 不是简单的int或字符串。
我的班级看起来像这样:
public class Club
{
public int Id { get; set; }
public string ClubName { get; set; }
public List<Member> Members { get; set; }
}
成员类看起来像这样:
public class Member
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime MemberSince { get; set; }
}
再说明一点......
var myClubs = new List<Club>();
myClubs = getSomeData();
var uniqueMembers = myClubs.Select()...
答案 0 :(得分:2)
这是一种方法:
docker-machine
根据评论,如果成员具有相同的docker-machine
,则成员是平等的。
因此,首先您使用docker-machine stop default
选择所有俱乐部的所有成员,然后按var result = myClubs
.SelectMany(x => x.Members)
.GroupBy(x => x.Id)
.Select(x => x.First())
.ToList();
对其进行分组。
现在每个组只包含同一成员的多个实例(如果没有此类成员的重复,则只包含一个成员)。
然后,您只需选择每个组的第一个成员即可获得唯一成员。
答案 1 :(得分:0)
这有效:
List<Member> distinctMembers =
myClubs
.SelectMany(c => c.Members)
.GroupBy(m => m.Id)
.SelectMany(m => m.Take(1))
.ToList();
答案 2 :(得分:-1)
覆盖GetHashCode和Equals方法。
public class Member
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime MemberSince { get; set; }
public override int GetHashCode()
{
// if each member has a unique Id assigned to him/her
// you can simply return Id
return Id.GetHashCode();
}
public override bool Equals(object obj)
{
var member = (Member)obj;
return member == null
? false
: Id == member.Id;
}
}
然后,要获得每个俱乐部的唯一成员列表,您可以致电:
var uniqueMembersForEachClub = myClubs.Select(c => c.Members.Distinct());
要获得所有俱乐部的独特会员列表,您可以致电:
var uniqueMembers = myClubs.SelectMany(c => c.Members).Distinct();
您需要包含:
using System.Linq;
祝你好运!