使用lambda从嵌套列表中区分值
本文关键字:中区 列表 嵌套 lambda 使用 | 更新日期: 2023-09-27 17:51:12
我有一个文档列表,其中包含一个文档组列表,我想选择所有不同的文档组来执行操作。通过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);
}
}
谢谢,莱安德罗Tavares
我怀疑您只是想要[SelectMany
]1的组合(将文档列表扁平化为文档组序列),然后Distinct
以获得不同的元素:
var documentGroups = documentList.SelectMany(d => d.DocumentGroups)
.Distinct()
.ToList();
你需要在DocumentGroup
中覆盖GetHashCode
,正如Servy所指出的那样。在本例中,这是微不足道的:
public override int GetHashCode()
{
return DocumentGroupId;
}
还请注意,让DocumentGroupId
可变同时作为平等的关键是令人担忧的。如果可以,将其更改为不可变的,并将ID传递给构造函数。