@@ -56,13 +56,27 @@ private static void UnloadSnapshot(IEnumerable<ResourceEntity> resourceEntities)
5656
5757 private static void Load ( this IEnumerable < ResourceEntity > resourceEntities , IEnumerable < EntitySnapshot > entitySnapshots )
5858 {
59+ var entitySnapshotMap = entitySnapshots
60+ . GroupBy ( snapshot => ( snapshot . ProjectName ? . ToUpperInvariant ( ) , snapshot . UniqueName ? . ToUpperInvariant ( ) ) )
61+ . ToDictionary ( g => g . Key , g => g . First ( ) ) ;
62+
5963 resourceEntities . ForEach ( entity =>
6064 {
61- var entrySnapshots = entitySnapshots . Where ( snapshot => Equals ( entity , snapshot ) ) . Select ( s => s . Entries ) . FirstOrDefault ( ) ?? Array . Empty < EntrySnapshot > ( ) ;
65+ var entityKey = ( entity . ProjectName ? . ToUpperInvariant ( ) , entity . UniqueName ? . ToUpperInvariant ( ) ) ;
66+ var entrySnapshots = entitySnapshotMap . TryGetValue ( entityKey , out var entitySnapshot )
67+ ? entitySnapshot . Entries ?? Array . Empty < EntrySnapshot > ( )
68+ : Array . Empty < EntrySnapshot > ( ) ;
69+
70+ var entrySnapshotMap = entrySnapshots
71+ . Where ( s => s . Key != null )
72+ . GroupBy ( s => s . Key ?? string . Empty , StringComparer . Ordinal )
73+ . ToDictionary ( g => g . Key , g => g . First ( ) . Data ?? Array . Empty < DataSnapshot > ( ) , StringComparer . Ordinal ) ;
6274
6375 entity . Entries . ForEach ( entry =>
6476 {
65- var data = entrySnapshots . Where ( s => string . Equals ( entry . Key , s . Key , StringComparison . Ordinal ) ) . Select ( s => s . Data ) . FirstOrDefault ( ) ?? Array . Empty < DataSnapshot > ( ) ;
77+ var data = entrySnapshotMap . TryGetValue ( entry . Key , out var snapData )
78+ ? snapData
79+ : Array . Empty < DataSnapshot > ( ) ;
6680
6781 entry . Snapshot = data . ToDictionary ( item => new CultureKey ( item . Language ) , item => new ResourceData { Text = item . Text , Comment = item . Comment } ) ;
6882 } ) ;
0 commit comments