合并2个linq操作
本文关键字:操作 linq 2个 合并 | 更新日期: 2023-09-27 17:58:43
问候我有一个逻辑问题我有两个过程
首先是linq,它看起来像:
_sharedDocumentsAttachments = SourceDocumentAttachmentMeta
.Where(sDoc => TargetDocumentAttachmentMeta.Any(tDoc => tDoc.DocumentBridgeId == sDoc.DocumentId)).ToList();
何处
List<DocumentAttachment> _sharedDocumentsAttachments;
和
SharedDocumnentAttachmentConnector = new Dictionary<int, int>();
foreach (DocumentAttachment document in _sharedDocumentsAttachments)
{
foreach (DocumentAttachment tDoc in TargetDocumentAttachmentMeta.Where(tDoc => document.DocumentId == tDoc.DocumentBridgeId))
{
SharedDocumnentAttachmentConnector.Add(document.DocumentId, tDoc.DocumentId);
}
}
我想知道我是否可以以某种方式将第二个过程附加到第一个过程,因为基本上他们正在进行相同的比较,但将值添加到两个不同的集合?
我尝试了每种方法,但它不会正确工作。
您可以这样做:连接两个集合,然后指定如何转换为字典
_sharedDocumentsAttachments.Join(TargetDocumentAttachmentMeta,
document => document.DocumentId,
tDoc => tDoc.targetDocument,
(document, tDoc) => new
{
Key = document.DocumentId,
Value = tDoc.DocumentId
})
.ToDictionary(item => item.Key,
item => item.Value);
请注意,如果联接将导致同一文档有2条"记录"。DocumentId将抛出一个ArgumentException: An item with the same key has already been added
。
如果这可能发生,那么想想:
- 将其保存为
LookUp
- 将其保存为
Dictionary<int,IEnumerable<int>>
对于两者之间的差异,请检查此