C# 组合2个linq操作
你好我有一个逻辑问题我有两个程序 首先是linq,看起来像:C# 组合2个linq操作,c#,linq,C#,Linq,你好我有一个逻辑问题我有两个程序 首先是linq,看起来像: _sharedDocumentsAttachments = SourceDocumentAttachmentMeta .Where(sDoc => TargetDocumentAttachmentMeta.Any(tDoc => tDoc.DocumentBridgeId == sDoc.DocumentId)).ToList(); 在哪里 List\u共享文档附件; 及 SharedDocumentAttachm
_sharedDocumentsAttachments = SourceDocumentAttachmentMeta
.Where(sDoc => TargetDocumentAttachmentMeta.Any(tDoc => tDoc.DocumentBridgeId == sDoc.DocumentId)).ToList();
在哪里
List\u共享文档附件;
及
SharedDocumentAttachmentConnector=new Dictionary();
foreach(共享文档附件中的文档附件)
{
foreach(TargetDocumentAttachmentMeta.Where(tDoc=>document.DocumentId==tDoc.DocumentBridgeId))中的DocumentAttachment tDoc)
{
SharedDocumentAttachmentConnector.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);
请注意,如果联接的结果是同一document.DocumentId有2条“记录”,则会抛出一个参数异常:已添加具有相同键的项
如果可能发生这种情况,请考虑:
将其保存为查找
将其保存为词典
因为两者之间的差异
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);