我正在使用Microsoft.Web.WebSockets
作为应用。
我有一组用户WebSocketCollection group;
,我需要向除了一个
group.Except(group.Where(r=>((MicrosoftWebSockets)r).user_id==1)).Broadcast("Message");
但是我使用Except子句WebSocketCollection
的那一刻变成IEnumerable<WebSocketHandler>
然后我就无法使用Broadcast方法了。
任何其他方法都会有所帮助。
答案 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");