/// <summary> /// Permet de générer la liste de valeur distinct d'un DataSet. /// </summary> /// <param name="dataSetId">Id du DataSet</param> /// <returns>Nombre d'enregistrement réussi</returns> /// <remarks>S'il existe déjà des données, elles sont effacées au profit des nouvelles.</remarks> public async Task <int> InitializeDistinctValue(long dataSetId) { List <Tuple <string, long> > lstDim = await UnitOfWork.GetDbContext().DataSetDimension .Include(d => d.DataSet) .Include(d => d.Dimension) .Where(d => d.DataSet.Id == dataSetId) .Select(d => new Tuple <string, long>(d.ColumnName, d.Dimension.Id)) .AsNoTracking() .ToAsyncEnumerable() .ToList(); List <DistinctValue> lstDistinct = await UnitOfWork.GetDbContext().DistinctValue .Where(dv => dv.DataSetId == dataSetId) .ToAsyncEnumerable() .ToList(); UnitOfWork.GetDbContext().DistinctValue.RemoveRange(lstDistinct); foreach (Tuple <string, long> t in lstDim) { Expression <Func <ValueObject, string> > selectExpr = PropertyHelper.GetSelectDimension(t.Item1); List <string> lst = await UnitOfWork.GetDbContext().ValueObject .Include(vo => vo.DataSet) .Where(vo => vo.DataSet.Id == dataSetId) .Select(selectExpr) .Distinct() .AsNoTracking() .ToAsyncEnumerable() .ToList(); foreach (string distinctValue in lst) { DistinctValue dv = new DistinctValue() { DataSetId = dataSetId, DimensionId = t.Item2, Value = distinctValue }; UnitOfWork.DistinctValueRepository.PrepareAddForObject(dv); } } return(await UnitOfWork.GetDbContext().SaveChangesAsync()); }
private static List <DistinctValue> GetAmountOfEachDistinctValue(DataTable dt, int indexOfColumnToCheck) { var foundValues = new List <DistinctValue>(); var distinctValues = Feature.GetDistinctValuesOfColumn(dt, indexOfColumnToCheck); foreach (var val in distinctValues) { var occurence = 0; for (var i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][indexOfColumnToCheck].ToString().Equals(val)) { occurence++; } } var array = new DistinctValue(val, occurence); foundValues.Add(array); } return(foundValues); }