问一个关于Linq的小疑点.(select not like)
问一个关于Linq的小问题.(select not like)
我有一个全局的集合
每次有客户端连接 我都会用ip:port当作key 当前连接当作value
但是现在有个需求,就是一个IP只能连接一次.新连接的如果跟前面的IP有一样的,那么删除原来的key
保证ClientList里面的IP都不同.
实际上 我用for循环判断可以移除,但是这个ClientList会很大很大,几万几十万几百万.
所以求一个Linq语句找到IP一样的删除之后在添加新的..
比如
我是瞎写的 差不多这个意思..
------解决方案--------------------
我有一个全局的集合
static Dictionary<string, Socket> ClientList = new Dictionary<string, Socket>();
每次有客户端连接 我都会用ip:port当作key 当前连接当作value
var client= ar.AsyncState as Socket;
var ipport = client.RemoteEndPoint.ToString();
ClientList.Add(ipport, client);
但是现在有个需求,就是一个IP只能连接一次.新连接的如果跟前面的IP有一样的,那么删除原来的key
保证ClientList里面的IP都不同.
实际上 我用for循环判断可以移除,但是这个ClientList会很大很大,几万几十万几百万.
所以求一个Linq语句找到IP一样的删除之后在添加新的..
比如
var ip=1;
var port=2;
var new=ClientList.select("key not like " +ip+"%");
new.add(ip+":"+port,client);
Client=new;
我是瞎写的 差不多这个意思..
------解决方案--------------------
private void InsertNewIP(string sIp, string sPort, Socket newSocket)
{
string sFindKey = ClientList.Keys.Where(x => x.Substring(0, x.IndexOf(':')) == sIp).SingleOrDefault();
if (sFindKey == null)
{
ClientList.Add(sIp + ":" + sPort, newSocket);
}
else
{
ClientList.Remove(sFindKey);
ClientList.Add(sIp + ":" + sPort, newSocket);
}
}