合并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);
    }
}

我想知道我是否可以以某种方式将第二个过程附加到第一个过程,因为基本上他们正在进行相同的比较,但将值添加到两个不同的集合?

我尝试了每种方法,但它不会正确工作。

合并2个linq操作

您可以这样做:连接两个集合,然后指定如何转换为字典

_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

如果这可能发生,那么想想:

  1. 将其保存为LookUp
  2. 将其保存为Dictionary<int,IEnumerable<int>>

对于两者之间的差异,请检查此