我对这个问题有 2 个部分:
有没有办法摆脱外循环
List<Document> newDocuments = new List<Document>(); foreach (DocumentDetail documentDetail in documentDetails) { newDocuments.AddRange(documents.FindAll(d => d.Extension.ToUpperInvariant() == documentDetail.Extension.ToUpperInvariant())); }
从上面可以看出,我只是在处理“扩展”,即使我最终保留了我的外部 foreach 循环,我仍然想检查所有其他属性(即描述等),所以我可以最终对内部部分进行了多次调用,最终看起来像这样,假设我现在正在检查描述
newDocuments.AddRange(documents.FindAll(d => d.Description.ToUpperInvariant() == documentDetail.Description.ToUpperInvariant()));
上面的问题是,如果文档恰好具有 .pdf 扩展名然后与描述匹配,我最终可能会得到重复的文档。
如何确保不添加重复文件。我可以向我的 linq 查询(或 lambda 吗?)添加一些东西。就唯一性而言,虽然不确定,但现在我可以访问“documentno”,它对于“文档”列表中的所有文档都是唯一的。
如果您知道其中一部分的答案,请告诉我。
赞赏!
已编辑
那这个呢?它肯定有效,但我不确定这是写这个的正确方法吗?
List<Document> newDocs = (from documentDetail in documentDetails
from document in documents
where document.Extension.ToUpperInvariant() == documentDetail.Extension.ToUpperInvariant()
select document).Distinct().ToList();
我最好坚持 foreach 循环吗?
使用上述内容,如果我想根据我的文档列表检查 DocumentDetails 列表中的多个属性,我最终会得到类似的结果:
List<Document> newDocuments = null;
if (documentDetails.FindAll(dd => (dd.Extension != null || !string.IsNullOrEmpty(dd.Extension))).Count > 0)
{
newDocuments = (from documentDetail in documentDetails
from document in documents
where document.Extension.ToUpperInvariant() == documentDetail.Extension.ToUpperInvariant()
select document).Distinct().ToList();
}
if (documentDetails.FindAll(dd => (dd.Description != null || !string.IsNullOrEmpty(dd.Description))).Count > 0)
{
newDocuments = (from documentDetail in documentDetails
from document in documents
where document.Description.ToUpperInvariant() == documentDetail.Description.ToUpperInvariant()
select document).Distinct().ToList();
}
虽然我仍然希望有人确认我写这篇文章的方式是正确的,但我仍然想知道如何附加结果然后删除所有重复项。我想当一切都完成后,我可以应用 Distinct,但我仍然面临“附加”问题。那我该怎么做呢?
谢谢。