public Tuple<IndivDescs, Exception> GetDataSetIndivs(StatDataSet oSet)
 {
     if (oSet == null)
     {
         return new Tuple<IndivDescs, Exception>(null, new ArgumentNullException());
     }
     IndivDescs oRet = null;
     Exception err = null;
     try
     {
         using (var ctx = getContext())
         {
             DbDataSet pSet = findDataSet(ctx, oSet);
             if (pSet == null)
             {
                 return new Tuple<IndivDescs, Exception>(oRet, err);
             }
             DbVariable pIdVar = null;
             DbVariable pNameVar = null;
             DbVariable pImageVar = null;
             var q = from x in pSet.Variables select x;
             foreach (var v in q)
             {
                 if (v.IsId)
                 {
                     pIdVar = v;
                 }
                 if (v.IsName)
                 {
                     pNameVar = v;
                 }
                 if (v.IsImageVar)
                 {
                     pImageVar = v;
                 }
             }// v
             bool bImageInt = false;
             if (pImageVar != null)
             {
                 String s = pImageVar.VarType.Trim().ToLower();
                 if ((s != "string") && (s != "bool"))
                 {
                     bImageInt = true;
                 }
             }
             List<IndivDesc> oList = new List<IndivDesc>();
             var indexes = (from x in ctx.DbValues where x.Variable.DataSetId == pSet.Id select x.Index).Distinct();
             foreach (var ind in indexes)
             {
                 IndivDesc pp = new IndivDesc();
                 pp.IndivIndex = ind;
                 if (pIdVar != null)
                 {
                     var qx = from x in ctx.DbValues where (x.VariableId == pIdVar.Id) && (x.Index == ind) select x;
                     if (qx.Count() > 0)
                     {
                         pp.IdString = qx.First().Value;
                     }
                 }// Id
                 if (pNameVar != null)
                 {
                     var qx = from x in ctx.DbValues where (x.VariableId == pNameVar.Id) && (x.Index == ind) select x;
                     if (qx.Count() > 0)
                     {
                         pp.Name = qx.First().Value;
                     }
                 }// name
                 if (pImageVar != null)
                 {
                     var qx = from x in ctx.DbValues where (x.VariableId == pImageVar.Id) && (x.Index == ind) select x;
                     if (qx.Count() > 0)
                     {
                         var px = qx.First();
                         String sx = StatHelpers.ConvertValue(px.Value);
                         if (!String.IsNullOrEmpty(sx))
                         {
                             if (bImageInt)
                             {
                                 double dval = 0.0;
                                 if (double.TryParse(sx, out dval))
                                 {
                                     int ival = (int)dval;
                                     if (ival != 0)
                                     {
                                         var qz = from x in ctx.DbPhotoes where x.Id == ival select x;
                                         if (qz.Count() > 0)
                                         {
                                             var pz = qz.First();
                                             pp.PhotoId = pz.Id;
                                             pp.PhotoData = pz.DataBytes;
                                         }
                                     }// ival
                                 }
                             }
                             else
                             {
                                 var qz = from x in ctx.DbPhotoes where x.Name.Trim().ToLower() == sx.ToLower() select x;
                                 if (qz.Count() > 0)
                                 {
                                     var pz = qz.First();
                                     pp.PhotoId = pz.Id;
                                     pp.PhotoData = pz.DataBytes;
                                 }
                             }// ival
                         }// sx
                     }
                 }// photo
                 ValueDescs vv = new ValueDescs();
                 var qq = from x in ctx.DbValues where (x.Variable.DataSetId == pSet.Id) && (x.Index == ind) select x;
                 foreach (var v in qq)
                 {
                     ValueDesc fx = new ValueDesc();
                     convertValue(v, fx);
                     vv.Add(fx);
                 }// v
                 pp.Values = vv;
                 oList.Add(pp);
             }// ind
             if (oList.Count > 1)
             {
                 oList.Sort();
             }
             oRet = new IndivDescs(oList);
         }// ctx
     }// try
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<IndivDescs, Exception>(oRet, err);
 }
        public Tuple<IndivDescs, VariableDescs, Exception> FetchAllDataSetData(StatDataSet oSet)
        {
            IndivDescs indivs = null;
            VariableDescs vars = null;
            Exception err = null;
            try
            {
                using (var ctx = getContext())
                {
                    DbDataSet pSet = findDataSet(ctx, oSet);
                    if (pSet == null)
                    {
                        return new Tuple<IndivDescs, VariableDescs, Exception>(indivs, vars, err);
                    }
                    DbVariable pIdVar = null;
                    DbVariable pNameVar = null;
                    DbVariable pImageVar = null;
                    var q = from x in pSet.Variables orderby x.Name select x;
                    foreach (var v in q)
                    {
                        if (v.IsId)
                        {
                            pIdVar = v;
                        }
                        if (v.IsName)
                        {
                            pNameVar = v;
                        }
                        if (v.IsImageVar)
                        {
                            pImageVar = v;
                        }
                    }// v
                    bool bImageInt = false;
                    if (pImageVar != null)
                    {
                        String s = pImageVar.VarType.Trim().ToLower();
                        if ((s != "string") && (s != "bool"))
                        {
                            bImageInt = true;
                        }
                    }
                    List<VariableDesc> oRet = new List<VariableDesc>();
                    HashSet<int> oSetIndex = new HashSet<int>();
                    List<IndivDesc> listIndivs = new List<IndivDesc>();
                    Dictionary<int, ValueDescs> vals = new Dictionary<int, ValueDescs>();
                    foreach (var p in q)
                    {
                        VariableDesc pp = new VariableDesc();
                        convertVariable(p, pp);
                        var col = p.Values;
                        List<ValueDesc> pList = new List<ValueDesc>();
                        foreach (var v in col)
                        {
                            int index = v.Index;
                            if (index >= 0)
                            {
                                ValueDesc vv = new ValueDesc();
                                convertValue(v, vv);
                                pList.Add(vv);
                                if (!vals.ContainsKey(index))
                                {
                                    vals[index] = new ValueDescs();
                                }
                                (vals[index]).Add(vv);
                                if (!oSetIndex.Contains(index))
                                {
                                    oSetIndex.Add(index);
                                    var ind = new IndivDesc();
                                    listIndivs.Add(ind);
                                    ind.IndivIndex = index;
                                    if (pIdVar != null)
                                    {
                                        var qx = from x in pIdVar.Values where x.Index == index select x;
                                        if (qx.Count() > 0)
                                        {
                                            ind.IdString = qx.First().Value;
                                        }
                                    }// Id
                                    if (pNameVar != null)
                                    {
                                        var qx = from x in pNameVar.Values where x.Index == index select x;
                                        if (qx.Count() > 0)
                                        {
                                            ind.Name = qx.First().Value;
                                        }
                                    }// name
                                    if (pImageVar != null)
                                    {
                                        var qx = from x in pImageVar.Values where x.Index == index select x;
                                        if (qx.Count() > 0)
                                        {
                                            var px = qx.First();
                                            String sx = StatHelpers.ConvertValue(px.Value);
                                            if (!String.IsNullOrEmpty(sx))
                                            {
                                                if (bImageInt)
                                                {
                                                    double dval = 0.0;
                                                    if (double.TryParse(sx, out dval))
                                                    {
                                                        int ival = (int)dval;
                                                        if (ival != 0)
                                                        {
                                                            var qz = from x in ctx.DbPhotoes where x.Id == ival select x;
                                                            if (qz.Count() > 0)
                                                            {
                                                                var pz = qz.First();
                                                                ind.PhotoId = pz.Id;
                                                                ind.PhotoData = pz.DataBytes;
                                                            }
                                                        }// ival
                                                    }
                                                }
                                                else
                                                {
                                                    var qz = from x in ctx.DbPhotoes where x.Name.Trim().ToLower() == sx.ToLower() select x;
                                                    if (qz.Count() > 0)
                                                    {
                                                        var pz = qz.First();
                                                        ind.PhotoId = pz.Id;
                                                        ind.PhotoData = pz.DataBytes;
                                                    }
                                                }// ival
                                            }// sx
                                        }
                                    }// photo

                                }// add value
                            }// v
                        }// v
                        var xx = getVariableInfo(ctx, pp);
                        if (xx.Item2 != null)
                        {
                            return new Tuple<IndivDescs, VariableDescs, Exception>(indivs, vars, err);
                        }
                        pp.Info = xx.Item1;
                        pp.Values = new ValueDescs(pList);
                        oRet.Add(pp);
                    }// p
                    foreach (var ind in listIndivs)
                    {
                        int index = ind.IndivIndex;
                        if (vals.ContainsKey(index))
                        {
                            ind.Values = vals[index];
                        }
                    }// ind
                    if (listIndivs.Count > 1)
                    {
                        listIndivs.Sort();
                    }
                    if (oRet.Count > 1)
                    {
                        oRet.Sort();
                    }
                    indivs = new IndivDescs(listIndivs);
                    vars = new VariableDescs(oRet);
                }// ctx
            }// try
            catch (Exception ex)
            {
                err = ex;
            }
            return new Tuple<IndivDescs, VariableDescs, Exception>(indivs, vars, err);
        }
 public Dictionary<VariableDesc, ValueDescs> GetCommonValues(IEnumerable<VariableDesc> oVars)
 {
     Dictionary<VariableDesc, ValueDescs> oRet = new Dictionary<VariableDesc, ValueDescs>();
     if (oVars != null)
     {
         var indexes = GetCommonIndexes(oVars);
         if (indexes == null)
         {
             return oRet;
         }
         foreach (var v in oVars)
         {
             if (v != null)
             {
                 ValueDescs src = v.Values;
                 List<ValueDesc> vals = new List<ValueDesc>();
                 foreach (var ind in indexes)
                 {
                     var q = from x in src where x.Index == ind select x;
                     if (q.Count() > 0)
                     {
                         vals.Add(q.First());
                     }
                 }// ind
                 if (vals.Count < 1)
                 {
                     continue;
                 }
                 oRet[v] = new ValueDescs(vals);
             }// v
         }// v
     }// oVars
     return oRet;
 }
 public Dictionary<String, ValueDescs> ComputeVariableCategValues(VariableDesc oCateg, VariableDesc oVar)
 {
     Dictionary<String, ValueDescs> oRet = new Dictionary<string, ValueDescs>();
     ValueDescs categVals = oCateg.Values;
     ValueDescs dataVals = oVar.Values;
     if (categVals.Count < 1)
     {
         oRet[DEFAULT_SERIE_NAME] = dataVals;
     }
     else
     {
         foreach (var vcateg in categVals)
         {
             String skey = StatHelpers.ConvertValue(vcateg.DataStringValue);
             if (!String.IsNullOrEmpty(skey))
             {
                 var q = from x in dataVals where x.Index == vcateg.Index select x;
                 if (q.Count() > 0)
                 {
                     var vdata = q.First();
                     String sval = StatHelpers.ConvertValue(vdata.DataStringValue);
                     if (!String.IsNullOrEmpty(sval))
                     {
                         if (!oRet.ContainsKey(skey))
                         {
                             oRet[skey] = new ValueDescs();
                         }
                         oRet[skey].Add(vdata);
                     }// ok
                 }
             }// sKey
         }// vcateg
     }
     return oRet;
 }
 private Task<Tuple<StatDataSet, Exception>> readDataSet(String filename,
     sds.DataSet input, CancellationToken cancellationToken, IProgress<int> progress)
 {
     return Task.Run<Tuple<StatDataSet, Exception>>(() =>
     {
         StatDataSet oSet = null;
         Exception err = null;
         try
         {
             FileInfo info = new FileInfo(filename);
             oSet = new StatDataSet();
             oSet.Name = info.Name;
             var col = input.Variables;
             int nTotal = col.Count;
             int nCur = 0;
             foreach (var v in col)
             {
                 if (progress != null)
                 {
                     progress.Report(nCur++);
                 }
                 if (v.Dimensions.Count != 1)
                 {
                     continue;
                 }
                 VariableDesc vv = new VariableDesc();
                 ValueDescs vals = new ValueDescs();
                 vv.Name = v.Name;
                 Type t = v.TypeOfData;
                 if (t == typeof(String))
                 {
                     vv.DataType = "string";
                     vv.IsCategVar = true;
                     String[] data = input.GetData<String[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             vx.DataStringValue = data[i];
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(double))
                 {
                     vv.DataType = "double";
                     vv.IsCategVar = false;
                     double[] data = input.GetData<double[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(myconvert(data[i]));
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(float))
                 {
                     vv.DataType = "float";
                     vv.IsCategVar = false;
                     float[] data = input.GetData<float[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(myconvert(data[i]));
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(int))
                 {
                     vv.DataType = "int";
                     vv.IsCategVar = false;
                     int[] data = input.GetData<int[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(data[i]);
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(short))
                 {
                     vv.DataType = "short";
                     vv.IsCategVar = false;
                     short[] data = input.GetData<short[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(data[i]);
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(bool))
                 {
                     vv.DataType = "bool";
                     vv.IsCategVar = true;
                     bool[] data = input.GetData<bool[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(data[i]);
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 vv.Values = vals;
                 oSet.Variables.Add(vv);
             }// v
         }
         catch (Exception ex)
         {
             err = ex;
         }
         return new Tuple<StatDataSet, Exception>(oSet, err);
     }, cancellationToken);
 }// readDataSet