给出以下课程
public class Company
{
public List<Product> Products { get; set; }
}
public class Product
{
public Guid Id { get; set; }
public List<ProductPermission> Permissions { get; set; }
}
public class ProductPermission
{
public Guid Id { get; set; }
public string Name { get; set; }
}
在知道产品ID的情况下,向现有产品添加产品权限的最佳方法是什么?
答案 0 :(得分:4)
我假设您有IEnumerable<Product>
,否则您可以直接更改产品。
您可以使用FirstOrDefault
或SingleOrDefault
(多次抛出异常)根据给定的GUID获取正确的产品。然后,您可以向列表添加权限:
Product p = products.FirstOrDefault(p => p.Id == givenID));
if(p != null)
{
if(p.Permissions == null)
p.Permissions = new List<ProductPermission>();
p.Permissions.Add(new ProductPermission{ID = givenID, Name="PermissionName"});
}
答案 1 :(得分:2)
由于您使用列表,因此无法快速查找 - 您应切换到Dictionary<Guid, Product>
。
var perm = new ProductPermission() { Id = ..., Name = ... };
var prod = company.Products.FirstOrDefault(o => o.Id == perm.Id);
if (prod != null)
prod.Permissions.Add(perm);
答案 2 :(得分:2)
不知道,也许你正在寻找类似Find
的东西?
var product = company.Products.Find(p => p.Id == productId);
if (product != null)
product.Permissions.Add(permission)
答案 3 :(得分:1)
这是我这样做的方式。我不知道它是否是最好的。
public class Product
{
public Guid Id { get; set; }
public List<ProductPermission> Permissions { get; set; }
public void AddPermission(ProductPermission permission)
{
if(Permissions == null)
{
Permissions = new List<ProductPermission>();
}
Permissions.Add(permission);
}
}
然后我会打电话给
product.AddPermission(permission);
在上面的解决方案中,您不需要在要添加权限的每一段代码中检查空列表。你只能在一个地方拥有它......
答案 4 :(得分:0)
CurrentProduct.Permissions.Add(new ProductPermission() {GuidId=System.Guid.NewGuid(), Name="HeyMega"});
你可以在一行中做到这一点!
答案 5 :(得分:0)
让我们假设您有一个Company对象和一个ProductPermission对象
Company c = new Company();
ProductPermission permission = new ProductPermission();
Product p = c.Products.Find((p)=>p.Id == id);
if (p != default(Product))
p.Permissions.Add(permission);