结合2个linq操作

时间:2016-07-27 08:57:36

标签: c# linq

问候我有一个逻辑问题我有2个程序

首先是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个不同的集合中?

我正在为每个人进行实验,但它无法正常工作。

1 个答案:

答案 0 :(得分:2)

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

_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个“记录”。文档标识它将抛出ArgumentException: An item with the same key has already been added

如果可能发生这种情况,请考虑:

  1. 将其另存为LookUp
  2. 将其另存为Dictionary<int,IEnumerable<int>>
  3. 两个check this

    之间的差异