【发布时间】:2020-01-18 05:37:16
【问题描述】:
我有 3 个人住在 3 个房子里。
- 人 A (Joe) 住在 1 号房子里。
- B 人(简)住在 2 号房子里。
- C 人(Max)住在 3 号房子里。
我有一个按钮,我可以用它为某些人分配任务。它成为一种用户管理。 例如A 有权限进入 C 家。
我希望能够只显示尚未分配的房屋。
图示如下:
- Joe 是房子 A 的所有者和房子 B 的看守人。
如果我现在想为他分配一个新角色(C 房的看守人),我希望只有 C 房(唯一未分配的房屋)显示在下拉列表中。
问题:目前显示所有房屋。
代码结构:
我可以创建一个新的人或编辑一个现有的人。我有一个用于角色分配的枚举类:
public enum RoleType
{
[Display(Name = "Owner")]
Owner = 0,
[Display(Name = "Janitor")]
Janitor = 1
}
我还有一个角色定义模型:
public class RoleDefinitionModel
{
private RoleType? _role;
private House _selectedHouse;
public RoleDefinitionModel(IList<House> availableHouse, RoleType? selectedRole, House selectedHouse)
{
AvailableHouses = availableHouse;
_role = selectedRole;
_selectedHouse = selectedHouse;
StartChangeTracking();
}
public virtual RoleType? SelectedRole
{
get { return _role; }
set
{
if (_role == value)
return;
_role = value;
NotifyChanges();
}
}
public virtual House SelectedHouse
{
get { return _selectedHouse; }
set
{
if (_selectedHouse == value)
return;
_selectedHouse = value;
NotifyChanges();
}
}
public virtual IList<House> AvailableHouses { get; }
public virtual IList<RoleType> AvailableRoles { get; } = Enum<RoleType>.GetValues().ToList();
}
我已经有一个添加和删除方法,它也可以工作。只有一个问题:当我点击按钮时,我得到了我想要的下拉菜单。但我可以选择所有房屋。我只想查看我还没有没有被分配角色的房子。
public virtual void AddRoleDefinition()
{
var roleDefinition = new RoleDefinitionModel(House, null, null);
_roleDefinitions.Add(roleDefinition);
this.SubscribeChanged(roleDefinition);
}
哪种检查方法最有效:
-
Where()和Any()来自 System.Linq:
_roleDefinitions.Where(....Any());
-
Contains() -
或
Remove()在 foreach 循环中?
for (var i = selectedHouse.Count - 1; i >= 0; --i)
{
if (availableHouses.Contains(selectedHouse[i].Uid))
{
availableHouses.Remove(selectedHouse[i]);
}
}
foreach (var selectedhouse in availableHouses)
{
...
}
但是,我认为这种方法是错误的,我的查询在这里是错误的。我该如何解决这个问题?
【问题讨论】: