public async Task SaveVariableResults(VariableResult data) { var existingData = await GetVariableResultStorageModel(data.VariableId, data.ScenarioId); var dataModel = new VariableResultStorageModel { Id = existingData?.Id ?? Guid.NewGuid(), ScenarioId = data.ScenarioId, ModelId = data.ModelId, VariableId = data.VariableId, Sets = data.Sets, }; var itemBundles = data.Data .Select((val, index) => new { Index = index, Value = val }) .GroupBy(i => i.Index / ItemStorageBundleSize) .Select(x => new VariableResultItemBundleStorageModel { VariableResultId = dataModel.Id, ItemBundle = x.Select(v => v.Value).ToList(), }) .ToList(); await _variableResultsCollection.ReplaceOneAsync(x => x.Id == dataModel.Id, dataModel, new UpdateOptions { IsUpsert = true, }); await _variableResultItemsBundleCollection.DeleteManyAsync(x => x.VariableResultId == dataModel.Id); if (itemBundles.Any()) { await _variableResultItemsBundleCollection.InsertManyAsync(itemBundles); } }
public async Task SaveVariableResults(VariableResult data) { var existingData = await GetVariableResultStorageModel(data.VariableId, data.ScenarioId); var dataModel = new VariableResultStorageModel { Id = existingData?.Id ?? Guid.NewGuid(), ScenarioId = data.ScenarioId, ModelId = data.ModelId, VariableId = data.VariableId, Sets = data.Sets, }; var itemsModel = data.Data.Select(d => new VariableResultItemStorageModel { VariableResultId = dataModel.Id, Coordinates = d.C, Value = d.V, }).ToList(); await _variableResultsCollection.ReplaceOneAsync(x => x.Id == dataModel.Id, dataModel, new UpdateOptions { IsUpsert = true, }); await _variableResultItemsCollection.DeleteManyAsync(x => x.VariableResultId == dataModel.Id); if (itemsModel.Any()) { await _variableResultItemsCollection.InsertManyAsync(itemsModel); } }