2009-06-08 1 views
0

У меня есть коллекция Roles.GetAllRoles() для поставщиков членства. Теперь у меня есть одна роль «Системный администратор», которую я хотел бы удалить из этого списка, чтобы я мог использовать его в моем списке. Как мне это сделать?Как удалить один из элементов в ролях. GetAllRoles()

public void AssignUserToRoles_Activate(object sender, EventArgs e) 
     { 
      try 
      { 
       AvailableRoles.DataSource = Roles.GetAllRoles(); 
       AvailableRoles.DataBind(); 
      } 
      catch (Exception err) 
      { 
       // 
      } 
     } 

ответ

0

Если вы хотите, вы можете использовать LINQ для преобразования массива в список ...

var roles = Roles.GetAllRoles().ToList(); 
roles.Remove("Administrator"); //Yank out the admin role... 

AvailableRoles.DataSource = roles; 
AvailableRoles.DataBind(); 

Все ваши привязки будут работать нормально с List<String>

UPDATE:

ToList<T>() является extension method, который является частью пакета .Net 3.5. Вы должны убедиться, что ваш проект нацелен на эту версию фреймворка, и вам нужно убедиться, что ваш проект имеет ссылку на System.Core.

После того как вы эту ссылку нужно добавить Using заявление в верхней части файла код находится по адресу:

using System.Linq; 

Если у вас есть все эти эти вещи, то вы должны начать видеть кучу новых методов расширения проявляются в intellisense.

+0

Это странно. Я не получаю ToList() после Roles.GetAllRoles()?!?! – dcpartners

+0

@ dewacorp: привязка данных работает с интерфейсами коллекции, включая IEnumnerable , а не только конкретные типы сбора. – Richard

0

Roles.GetAllRoles() возвращаетстроки массив который можно фильтровать с помощью этого кода:

 string[] roles = Roles.GetAllRoles(); 
     var v = from role in roles 
       where role != "System Administrator" 
       select role; 

     AvailableRoles.DataSource = v; 
     AvailableRoles.DataBind(); 
2

Он может достичь без добавления каких-либо дополнительных строк кода.

public void AssignUserToRoles_Activate(object sender, EventArgs e) 
     { 
      try 
      { 
       AvailableRoles.DataSource = Roles.GetAllRoles().Except(new [] {"System Administrator"}); 
       AvailableRoles.DataBind(); 
      } 
      catch (Exception err) 
      { 
       // 
      } 
     } 

Комментарий: не знаете, зачем вам нужно ... поймать здесь. Но что бы то ни было, это решение выглядит аккуратно для меня.

+0

Невозможно сделать это: Roles.GetAllRoles(). За исключением (new [] {"Системный администратор"}); Нет методов для исключения? !!? – dcpartners

+0

"using System.Linq". Я думал, что это очевидно. Это метод расширения в DLL «System.Core». –