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; * } */ }