我有一个包含DocumentGroups列表的Documents列表,我想选择所有不同的DocumentGroup来执行操作。迭代2个循环是微不足道的,但我无法通过lambda表达式找到如何做到这一点。有人可以提供一些帮助吗?
这些是
类public class Document
{
public int DocumentID {get; set;}
public string DocumentName {get; set;}
public List<DocumentGroup> DocumentGroups { get; set; }
}
public class DocumentGroup : IEquatable<DocumentGroup>
{
public int DocumentGroupID { get; set; }
public string GroupName { get; set; }
public bool Equals(DocumentGroup other)
{
if (other == null)
return false;
return other.DocumentGroupID == this.DocumentGroupID;
}
}
这是简单的代码
List<DocumentGroup> distinctDocumentGroups = new List<DocumentGroup>();
foreach (Document d in documentList)
{
foreach(DocumentGroup dg in d.DocumentGroups)
{
if (!distinctDocumentGroups.Contains(dg))
distinctDocumentGroups.Add(dg);
}
}
谢谢, Leandro Tavares
答案 0 :(得分:2)
我怀疑您只想要[SelectMany
] 1的组合(将文档列表展平为文档组序列),然后Distinct
以获取不同的元素:
var documentGroups = documentList.SelectMany(d => d.DocumentGroups)
.Distinct()
.ToList();
如同Servy所述,您还需要覆盖GetHashCode
中的DocumentGroup
。在这种情况下,这是微不足道的:
public override int GetHashCode()
{
return DocumentGroupId;
}
另请注意,让DocumentGroupId
可变成为平等关键是令人担忧的。如果可以,将其更改为不可变,并将ID传递给构造函数。