[英]Group a complex type by value
我有這個對象:
notes:[
{ user: {
name: "A",
group:{
id:1,
name:"Group 1"
}
},
{ user: {
name: "B",
group:{
id:1,
name:"Group 1"
}
}]
我需要按組對其進行分組。所以我嘗試了以下操作:
foreach (IGrouping<Group, Note> item in notes.GroupBy(n => n.User.Group))
{
var groupName = item.Key.Name;
foreach (var note in item)
{
//
}
}
但是我遇到了一個問題,因為分組不起作用(我認為這是因為它使用引用來對復雜類型進行分組)。 如果我改變n.User.Group
通過n.User.GroupId
它的工作原理,但如果我這樣做,我不能獲得組名稱。
您需要在Group類中重寫Equals和GetHashCode。 R#為其生成這種代碼:
public class Group
{
public int GroupId { get; set; }
public string Name { get; set; }
protected bool Equals(Group other)
{
return GroupId == other.GroupId;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((Group) obj);
}
public override int GetHashCode()
{
return GroupId;
}
}
是的,這是正確的。 默認情況下,類都是唯一的,但是您可以覆蓋唯一性。
Equals(object obj)
和GetHasCode()
以實現自己的相等性 IEqualityComparer<Group>
並將其作為GroupBy方法的第3個參數傳遞。 你有幾個選擇:
您可以利用比較匿名類的優勢,並編寫為
notes.GroupBy(n => new{n.User.Group.ID,n.User.Group.Name});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.