我正在使用 Microsoft.Web.WebSockets对于一个应用程序。
我有一个用户集合WebSocketCollection group;我需要向除了一个人之外的所有人发送消息
group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)).Broadcast("Message");
但是我使用 Except 子句的那一刻 WebSocketCollection变成 IEnumerable<WebSocketHandler>然后我不能使用广播方法。
任何其他方法都会有所帮助。
请您参考如下方法:
Broadcast方法在 WebSocketCollection 上定义类(class)。在 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");
