首先,我刚刚开始乱用LINQ,我真的不明白它。
无论如何,我要做的是添加一个带有LINQ和.Where语句的List。
这是我尝试过的:
List<object> FirstList = new List<object>();
List<object> SecondList = new List<object>();
Listener.Clients.Where(x => (x.Value.Authenticated) ? FirstList.Add(x.Value.UserID) : SecondList.Add(x.Value.UserID));
Listener是一个套接字包装类,而Clients是一个类Client的数组。
在那个Client类中有一些我需要的值,我想检查该客户端是否经过身份验证(登录),如果是,请将其添加到第一个列表,如果不是,请添加它到第二个列表,但似乎?:运算符必须有一个返回值,但添加到列表不会返回任何内容。
我希望我解释得那么好;用言语我不是最好的。
答案 0 :(得分:6)
IEnumerable.Where
仅用于过滤符合特定条件的List元素。你试图在Where子句中操作,这是不正确的。
我猜你想要的东西是:
var firstList =
Listener
.Clients
.Where(c => c.Value.Authenticated).Select(c => c.Value.UserID).ToList();
var secondList =
Listener
.Clients
.Where(c => !c.Value.Authenticated).Select(c => c.Value.UserID).ToList();
答案 1 :(得分:3)
您正在尝试使用一个枚举创建两个(或更多)列表。请考虑使用ToLookup
代替:
ILookup<bool, Client> lookup = source.ToLookup(c => c.Value.Authenticated);
List<Client> firstList = lookup[true].ToList();
List<Client> secondList = lookup[false].ToList();
当一个未知密钥被发送到查找时,它将返回一个空集合。
您需要UserIds而不是Clients,因此请使用选择值的ToLookup重载。
ILookup<bool, string> lookup = source
.ToLookup(c => c.Value.Authenticated, c => c.Value.UserId);
List<string> firstList = lookup[true].ToList();
List<string> secondList = lookup[false].ToList();
答案 2 :(得分:0)
此IEnumerable.Where扩展方法用于检索已过滤的元素列表,并将匿名方法作为参数,该方法必须接收元素类型并返回bool。