我有这样的课程:
public class EntityIdentifier
{
int Id { get; set; }
int EntityId { get; set; }
int SourceId { get; set; }
ICollection<BaseEntityIdentifierDetail> IdentifierValues { get; set; }
}
EntityIdentifier包含一个keyvalue对列表(IdentifierValues)。
然后我有一个EntityIdentifier列表,我想通过IdentifierValues属性进行分组。
var allIds = myIdentifiers.GroupBy(i => i.IdentifierValues);
它编译,但我不确定它会如何表现。我的猜测是我必须在某处实现一些覆盖(比如Equal和GetHashCode),以便可以正确地将对象列表用作分组键。
任何人都知道要将一个集合正确地用作分组键,该实现了什么?
编辑1:要使两个EntityIdentifier相等,它们的键值对(IdentifierValues)必须全部相同。例如。所有相同的键与相同的值和相同大小的列表相关联。
编辑2:IdentifierValues的代码:
public class BaseEntityIdentifierDetail
{
public int Id { get; set; }
public string Key { get; set; }
public string Value { get; set; }
}
答案 0 :(得分:1)
您应该实现IEqualityComparer<T>
界面。然后使用GroupBy()
方法,该方法使用定义的IFormatter
类。
IEqualityComparer<T>
用法:
public class ColectionBaseEntityIdentifierDetailComparer
: IEqualityComparer<ICollection<BaseEntityIdentifierDetail>>
{
public bool Equals(ICollection<BaseEntityIdentifierDetail> left,
ICollection<BaseEntityIdentifierDetail> right)
{
// compare left and right
return true;
}
public int GetHashCode(ICollection<BaseEntityIdentifierDetail> obj)
{
// return correctly implemented GetHashCode()
return 1;
}
}