Example #1
0
        public static List <MetricValue.Extend> MetricValuesForCalculation(int ActGen, out List <Bll.MetricValue.Extend> _OutputValues)
        {
            LinqMicajahDataContext dc = new LinqMicajahDataContext();

            //http://omaralzabir.com/linq_to_sql_solve_transaction_deadlock_and_query_timeout_problem_using_uncommitted_reads/
            // WITH (NOLOCK)
            int OldTimeOut = dc.CommandTimeout;

            dc.CommandTimeout = 600;

            IQueryable <MetricValue> metricValue =
                from mv in dc.MetricValue
                join m in dc.Metric on
                new { mv.InstanceId, mv.MetricID } equals
            new { m.InstanceId, m.MetricID }
            where
            mv.Status == true &&
            mv.IsCalc == true &&
            m.Generation == (ActGen - 1)
            select mv;

            foreach (MetricValue mv in metricValue)
            {
                mv.InProcess = true;
                mv.IsCalc    = false;
            }
            dc.SubmitChanges();

            IMultipleResults results = dc.Sp_SelectOutputMetricValues(ActGen);

            _OutputValues = results.GetResult <Sp_SelectOutputMetricValuesResult1>()
                            .Select(r => new Extend
            {
                // metric
                InstanceId  = (Guid)r.InstanceId,
                MetricID    = (Guid)r.MetricID,
                FrequencyID = (int)r.FrequencyID,
                MetricInputUnitOfMeasureID = r.MetricInputUnitOfMeasureID,
                MetricUnitOfMeasureID      = r.MetricUnitOfMeasureID,
                RelatedFormulaID           = r.MetricFormulaID,
                VariableFormula            = r.VariableFormula,
                // value
                MetricValueID = (Guid)r.MetricValueID,
                OrgLocationID = (Guid)r.OrgLocationID,
                Date          = (DateTime)r.Date
            })    //.OrderBy(r=>r.Date)
                            .ToList();

            List <MetricValue.Extend> _InputValues = results.GetResult <Sp_SelectOutputMetricValuesResult2>()
                                                     .Select(r => new Extend
            {
                // metric
                MetricID = (Guid)r.MetricID,
                Variable = r.Variable,
                MetricInputUnitOfMeasureID = r.MetricInputUnitOfMeasureID,
                MetricUnitOfMeasureID      = r.MetricUnitOfMeasureID,
                RelatedFormulaID           = r.MetricFormulaID,
                // value
                MetricValueID                 = (Guid)r.MetricValueID,
                OrgLocationID                 = (Guid)r.OrgLocationID,
                Date                          = (DateTime)r.Date,
                Value                         = r.Value,
                MissedCalc                    = (bool)r.MissedCalc,
                ConvertedValue                = r.ConvertedValue,
                InputUnitOfMeasureID          = r.ValueInputUnitOfMeasureID,
                UnitOfMeasureID               = r.ValueUnitOfMeasureID,
                RelatedOrgLocationUoMRecordID = r.MetricOrgLocationUoMID,
                OrgLocationUnitOfMeasureID    = r.OrgLocationUnitOfMeasureID
            })    //.OrderBy(r => r.Date) //???
                                                     .ToList();

            dc.CommandTimeout = OldTimeOut;
            return(_InputValues);
            //=========================

            /*Guid? _CurMetricID = null;
             * Guid? _CurOrgLocationID = null;
             * bool start = true;
             * foreach (MetricValue.Extend me in _OutputValues)
             * {
             *  if (start)
             *  {
             *      _CurMetricID = me.MetricID;
             *      _CurOrgLocationID = me.OrgLocationID;
             *  }
             *  me.UnitOfMeasureID = me.MetricUnitOfMeasureID;
             *  Guid? DefUoM = me.RelatedOrgLocationUoMRecordID == null ? me.MetricInputUnitOfMeasureID : me.OrgLocationUnitOfMeasureID;
             *  List<MetricValue.Extend> _RelatedInputValues = _InputValues.FindAll(r => (r.RelatedFormulaID == me.RelatedFormulaID) && (r.Date == me.Date) && (r.OrgLocationID == me.OrgLocationID));
             *  if (_RelatedInputValues.Count == 0)
             *      me.InputUnitOfMeasureID = DefUoM;
             *  bool IsSameInputUoMs = true;
             *  bool IsSameOutputUoMs = true;
             *  for (int i = 0; i < _RelatedInputValues.Count - 1; i++)
             *  {
             *      Guid? CurInputUoM = _RelatedInputValues[i].InputUnitOfMeasureID;
             *      Guid? CurOutputUoM = _RelatedInputValues[i].UnitOfMeasureID;
             *      for (int j = i + 1; j < _RelatedInputValues.Count; j++)
             *      {
             *          if (CurInputUoM != _RelatedInputValues[j].InputUnitOfMeasureID)
             *              IsSameInputUoMs = false;
             *          if (CurOutputUoM != _RelatedInputValues[j].UnitOfMeasureID)
             *              IsSameOutputUoMs = false;
             *      }
             *  }
             *  if (IsSameInputUoMs)
             *      me.InputUnitOfMeasureID = _RelatedInputValues[0].InputUnitOfMeasureID;
             *  else
             *      if (IsSameOutputUoMs)
             *          me.InputUnitOfMeasureID = _RelatedInputValues[0].UnitOfMeasureID;
             *      else
             *          me.InputUnitOfMeasureID = DefUoM;
             *
             *  if ((_CurMetricID != me.MetricID) || (_CurOrgLocationID != me.OrgLocationID) || start)
             *  {
             *      UpdateMetricOrgLocationUoM(me.InstanceId, me.MetricID, me.OrgLocationID, me.InputUnitOfMeasureID);
             *      _CurMetricID = me.MetricID;
             *      _CurOrgLocationID = me.OrgLocationID;
             *  }
             *  start = false;
             * }            */
        }