我有这堂课
public class ConnectionResult
{
private int connectionPercentage;
public int ConnectPercentage
{
get { return connectionPercentage; }
}
public ConnectionResult(int ip)
{
// Check connection and set connectionPercentage
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个管理器,它获取几个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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我想让它变得更好,所以我开始在linq中写它并且我得到了
conns.Count(x => x.Count(y => y.ConnectPercentage > ACCEPTABLE_CONNECTION));
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误Cannot implicitly convert type 'int' to 'bool'.有没有办法在linq中计算它还是我必须坚持我写的东西?顺便说一下,我是linq的新手
你使用了Count两次,我认为你不想.我想你只想要:
return conns.SelectMany(list => list)
.Count(conn => conn.ConnectPercentage > ACCEPTABLE_CONNECTION);
Run Code Online (Sandbox Code Playgroud)
该SelectMany呼叫是到"的列表阵列"变平成连接的单个序列.
John Skeet的答案非常好,但为了解决您所看到的错误,查询将是:
conns.Sum(x => x.Count(y => y.ConnectPercentage > ACCEPTABLE_CONNECTION));
Run Code Online (Sandbox Code Playgroud)
当然,无论你是从每个子集中选择每个项目然后对它们进行计数(如John Skeet建议的那样),或者你计算每个子集中的项目然后将计数加起来(就像我的代码建议的那样),结果就是相同.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |