public async Task SaveParameterData(ParameterData parameterData) { var existingData = await GetParameterDataStorageModel(parameterData.ParameterId, parameterData.ScenarioId); var dataModel = new ParameterDataStorageModel { Id = existingData?.Id ?? Guid.NewGuid(), ScenarioId = parameterData.ScenarioId, ModelId = parameterData.ModelId, ParameterId = parameterData.ParameterId, DefaultValue = parameterData.DefaultValue, Sets = parameterData.Sets, }; var itemBundles = parameterData.Data .Select((val, index) => new { Index = index, Value = val }) .GroupBy(i => i.Index / ItemStorageBundleSize) .Select(x => new ParameterDataItemBundleStorageModel { ParameterDataId = dataModel.Id, ItemBundle = x.Select(v => v.Value).ToList(), }) .ToList(); await _parameterDataCollection.ReplaceOneAsync(x => x.Id == dataModel.Id, dataModel, new UpdateOptions { IsUpsert = true, }); await _parameterDataItemBundleCollection.DeleteManyAsync(x => x.ParameterDataId == dataModel.Id); if (itemBundles.Any()) { await _parameterDataItemBundleCollection.InsertManyAsync(itemBundles); } }
public async Task SaveParameterData(ParameterData parameterData) { var existingData = await GetParameterDataStorageModel(parameterData.ParameterId, parameterData.ScenarioId); var dataModel = new ParameterDataStorageModel { Id = existingData?.Id ?? Guid.NewGuid(), ScenarioId = parameterData.ScenarioId, ModelId = parameterData.ModelId, ParameterId = parameterData.ParameterId, DefaultValue = parameterData.DefaultValue, Sets = parameterData.Sets, }; var itemsModel = parameterData.Data.Select(d => new ParameterDataItemStorageModel { ParameterDataId = dataModel.Id, Coordinates = d.C, Value = d.V, }).ToList(); await _parameterDataCollection.ReplaceOneAsync(x => x.Id == dataModel.Id, dataModel, new UpdateOptions { IsUpsert = true, }); await _parameterDataItemCollection.DeleteManyAsync(x => x.ParameterDataId == dataModel.Id); if (itemsModel.Any()) { await _parameterDataItemCollection.InsertManyAsync(itemsModel); } }