c# – 需要更好的方法来总结数据

前端之家收集整理的这篇文章主要介绍了c# – 需要更好的方法来总结数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个班
public class ConnectionResult
{
  private int connectionPercentage;

  public int ConnectPercentage
  {
     get { return connectionPercentage; }
  }

  public ConnectionResult(int ip)
  {
     // Check connection and set connectionPercentage
  }
}

并且我有一个经理可以获得ConnectionResult的几个列表,并对每个值进行计数,然后再按配置确定的特定数字.我的实现是这样的:

public class CurrentConnections
{
  private static CurrentConnections inst;

  private CurrentConnections()
  {

  }

  public static CurrentConnections GetInstance
  {
     get
     {
        if (inst != null)
        {
           inst = new CurrentConnections();
        }
        return inst;
     }
  }

   public int CountActiveConnections(params List<ConnectionResult>[] conns)
   {
     int rtVal = 0;

     foreach (List<ConnectionResult> connectionResult in conns)
     {
        foreach (var currConn in connectionResult)
        {
           if (currConn.ConnectPercentage > ACCEPTABLE_CONNECTION)
           {
              rtVal++;
           }
        }
     }

     return rtVal;
  }
}

但是我想让它更好,所以我开始写在linq,我得到了

conns.Count(x => x.Count(y => y.ConnectPercentage > ACCEPTABLE_CONNECTION));

但是这给我一个错误,不能将类型’int’隐式转换为’bool’.
有没有办法计算在linq或我必须留下我写的?
btw,我是linq的新手

解决方法

John Skeet‘s answer是非常好的,但为了解决你看到的错误,查询将是:
conns.Sum(x => x.Count(y => y.ConnectPercentage > ACCEPTABLE_CONNECTION));

> Count接受一个返回bool的函数,并返回满足该条件的集合中的项目数.
> Sum接受一个函数返回int(等等),并返回应用于每个项目的表达式的结果的总和.

当然,无论您选择每个子集中的每个项目,然后对其进行计数(如John Skeet建议),还是计算每个子集中的项目,然后将其计数(如我的代码所示),结果将完全相同相同.

原文链接:https://www.f2er.com/csharp/93058.html

猜你在找的C#相关文章