private IEnumerable <StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> > LookupStorages(IEnumerable <ITypedKey <TKey, TMeasureType> > taggedIds, DateTime from, DateTime to) { var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> >(); foreach (var id in taggedIds) { var storages = _storageSelector.GetStorage(id.Key, from, to); foreach (var storage in storages) { StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> existingStorage; if (!result.TryGetValue(storage, out existingStorage)) { var actualFrom = from; if (storage.From > from) { actualFrom = storage.From.Value; } var actualTo = to; if (storage.To < to) { actualTo = storage.To.Value; } existingStorage = new StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry>(storage.Storage, actualFrom, actualTo); existingStorage.Lookups = new List <ITypedKey <TKey, TMeasureType> >(); result.Add(storage, existingStorage); } existingStorage.Lookups.Add(id); } } return(result.Values); }
private IEnumerable <StorageLookupResult <TKey, List <TKey>, TEntry> > LookupStorages(IEnumerable <TKey> ids, DateTime to) { var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <TKey>, TEntry> >(); foreach (var id in ids) { var storages = _storageSelector.GetStorage(id, null, to); foreach (var storage in storages) { StorageLookupResult <TKey, List <TKey>, TEntry> existingStorage; if (!result.TryGetValue(storage, out existingStorage)) { var actualTo = to; if (storage.To < to) { actualTo = storage.To.Value; } existingStorage = new StorageLookupResult <TKey, List <TKey>, TEntry>(storage.Storage, null, actualTo); existingStorage.Lookups = new List <TKey>(); result.Add(storage, existingStorage); } existingStorage.Lookups.Add(id); } } return(result.Values); }
private IEnumerable <StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry> > LookupStorages(IEnumerable <ISerie <TKey, TEntry> > series) { var fr = new Dictionary <StorageKey <TKey, TEntry>, StorageLookupResult <TKey, Serie <TKey, TEntry>, TEntry> >(); foreach (var serie in series) { var key = serie.GetKey(); foreach (var entry in serie.GetEntries()) { var storage = _storageSelector.GetStorage(key, entry); var storageKey = new StorageKey <TKey, TEntry>(key, storage); StorageLookupResult <TKey, Serie <TKey, TEntry>, TEntry> existingStorage; if (!fr.TryGetValue(storageKey, out existingStorage)) { existingStorage = new StorageLookupResult <TKey, Serie <TKey, TEntry>, TEntry>(storage); existingStorage.Lookups = new Serie <TKey, TEntry>(key); fr.Add(storageKey, existingStorage); } existingStorage.Lookups.Entries.Add(entry); } } // collect series into groupings of storage var sr = new Dictionary <IStorage <TKey, TEntry>, StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry> >(); StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry> current = null; foreach (var kvp in fr) { var key = kvp.Key.Storage; if (current?.Storage != key && !sr.TryGetValue(key, out current)) { current = new StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry>(kvp.Value.Storage); current.Lookups = new List <Serie <TKey, TEntry> >(); sr.Add(key, current); } current.Lookups.Add(kvp.Value.Lookups); } return(sr.Values); }
private IEnumerable <StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> > LookupStorages(IEnumerable <ITypedKey <TKey, TMeasureType> > taggedIds) { var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> >(); foreach (var id in taggedIds) { var storages = _storageSelector.GetStorage(id.Key, null, null); foreach (var storage in storages) { StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> existingStorage; if (!result.TryGetValue(storage, out existingStorage)) { existingStorage = new StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry>(storage.Storage); existingStorage.Lookups = new List <ITypedKey <TKey, TMeasureType> >(); result.Add(storage, existingStorage); } existingStorage.Lookups.Add(id); } } return(result.Values); }