波斯汪
你需要改变它的思维方式。您不是在预定义的一组可应用用户权限中“in”查找当前项的用户权限,而是询问预定义的一组用户权限是否包含当前项的适用值。这与在.NET中的常规列表中查找项的方式完全相同。使用LINQ有两种方法,一种使用查询语法,另一种使用方法语法。本质上,它们是相同的,可以根据您的喜好交替使用:查询语法:var selected = from u in users where new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights)
select uforeach(user u in selected){
//Do your stuff on each selected user;}方法语法:var selected = users.Where(u => new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights));foreach(user u in selected){
//Do stuff on each selected user;}我在这个实例中的个人偏好可能是方法语法,因为我不需要分配变量,而是可以对这样的匿名调用执行以下操作:foreach(User u in users.Where(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights))){
//Do stuff on each selected user;}从语法上看,这看起来更复杂,您必须理解lambda表达式或委托的概念,才能真正了解发生了什么,但正如您所看到的,这将代码压缩得相当多。所有这些都取决于您的编码风格和偏好-我的三个示例所做的事情都略有不同。另一种方法甚至不使用LINQ,您可以使用相同的方法语法将“WHERE”替换为“FindAll”,并获得相同的结果,这在.NET 2.0中也适用:foreach(User u in users.FindAll(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights))){
//Do stuff on each selected user;}