public void CalculateWt(ICollection<CalculationConditionItem> conditions, ICollection<CalculationResultItem> results)
        {
            if (conditions != null && results != null)
            {
                //计算前将results集合清空
                results.Clear();

                //得到所有组的总tmp和
                double sumAllTmp = conditions.Sum(c => c.MoleWeight * c.At);

                var query = from c in conditions
                            group c by c.GroupName into g
                            select new
                            {
                                GroupName = g.Key,
                                GroupAtSum = g.Sum(c => c.At),
                                GroupAtMoleSum = g.Sum(c => c.MoleWeight * c.At),
                                GroupCount = g.Count(),
                                g
                            };

                foreach (var item in query)
                {
                    CalculationResultItem tmpCalculationResultItem = new CalculationResultItem();
                    tmpCalculationResultItem.Id = Guid.NewGuid();
                    tmpCalculationResultItem.GroupName = item.GroupName;
                    //按照组类生成名称和临时值,分两种情况,一个一组,和多个一组
                    StringBuilder sb = new StringBuilder();
                    if (item.GroupCount == 1)
                    {
                        sb.Append(item.g.FirstOrDefault().MaterialName);
                    }
                    else
                    {
                        foreach (var c in item.g)
                        {
                            //该组分名称当中是否包含多个元素,也就是说该组分是否是化合物形式存在
                            //判断方法就是大写字母的数量是否大于等于2
                            //如果是就加括号
                            if (CheckCapitalLetterMoreThanOne(c.MaterialName))
                            {
                                sb.Append("(");
                                sb.Append(c.MaterialName);
                                sb.Append(")");
                            }
                            else
                            {
                                sb.Append(c.MaterialName);
                            }
                            //保留两位小数
                            sb.Append((c.At / item.GroupAtSum * 100).ToString("N2"));
                        }
                    }

                    tmpCalculationResultItem.GroupComposition = sb.ToString();

                    tmpCalculationResultItem.Wt = item.GroupAtMoleSum / sumAllTmp;
                    tmpCalculationResultItem.Weight = 0;
                    results.Add(tmpCalculationResultItem);
                }
            }
        }
 public void CalcualteWithOneGroupWeight(CalculationResultItem alreadyKnownGroup, double groupWeight, ICollection<CalculationResultItem> results,
     out double totalWeight)
 {
     if (groupWeight > 0)
     {
         totalWeight = groupWeight / (alreadyKnownGroup.Wt);
         //首先得知总重量,然后调用总重量已知的计算方法
         CalculateWithTotalWeight(results, totalWeight);
     }
     else
     {
         totalWeight = 0;
     }
 }