2016-07-27 14 views
2

Grüße Kombinieren habe ich eine logische Frage bekam ich zwei Verfahren bekommen haben2 Linq Operationen

Zuerst ist Linq, die wie folgt aussieht:

_sharedDocumentsAttachments = SourceDocumentAttachmentMeta 
.Where(sDoc => TargetDocumentAttachmentMeta.Any(tDoc => tDoc.DocumentBridgeId == sDoc.DocumentId)).ToList(); 

Wo

List<DocumentAttachment> _sharedDocumentsAttachments; 

Und

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

Und ich wunderte mich g wenn ich eine zweite Prozedur irgendwie an die erste anhängen kann, da im Grunde genommen die gleichen vergleichen, aber zwei verschiedenen Sammlungen Werte hinzufügen?

Ich experimentierte mit jedem, aber es funktioniert nicht richtig.

Antwort

2

Sie können dies tun: kommen Sie mit den beiden Sammlungen und dann angeben, wie

_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); 

Beachten Sie Zum Wörterbuch konvertieren, dass, wenn die für die gleiche document.DocumentId mit 2 „Aufzeichnungen“ führt kommen sie werfen a ArgumentException: An item with the same key has already been added.

Wenn das könnte denken, passieren dann von:

  1. es als LookUp
  2. Speichern
  3. es als für Unterschiede Dictionary<int,IEnumerable<int>>

Speichern zwischen den beiden check this