将IEnumerable <websockethandler>转换为WebSocketCollection

时间:2016-03-25 10:37:15

标签: c# asp.net-mvc websocket

我正在使用Microsoft.Web.WebSockets作为应用。

我有一组用户WebSocketCollection group;,我需要向除了一个

以外的所有人发送消息
 group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)).Broadcast("Message");

但是我使用Except子句WebSocketCollection的那一刻变成IEnumerable<WebSocketHandler>然后我就无法使用Broadcast方法了。

任何其他方法都会有所帮助。

1 个答案:

答案 0 :(得分:3)

Broadcast类定义了WebSocketCollection方法。当您在WebSocketCollection上应用LINQ查询时,会得到IEnumerable<WebSocketHandler>没有Broadcast方法。

您可以创建新的WebSocketCollection,然后使用Add方法添加单个项目,如下所示:

var handlers = group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1));

var collection = new WebSocketCollection();

foreach(var item in handlers)
{
    collection.Add(item);
}

collection.Broadcast("Message");

您可以将此逻辑包装成这样的扩展方法:

public static class ExtentionMethods
{
    public static WebSocketCollection ToCollection(this IEnumerable<WebSocketHandler> handlers)
    {
        var collection = new WebSocketCollection();

        foreach (var item in handlers)
        {
            collection.Add(item);
        }

        return collection;
    }
}

并像这样使用它:

group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1))
.ToCollection()
.Broadcast("Message");

顺便说一下,你可以通过否定这样的条件来更好地完成LINQ查询:

group.Where(r=> !(((MicrosoftWebSockets)r).user_id == 1))
.ToCollection()
.Broadcast("Message");