/// <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());
        }
Example #2
0
        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);
        }