0

给定以下课程

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,将产品权限添加到现有产品的最佳方式是什么?

4

6 回答 6

4

我假设您有一个IEnumerable<Product>,否则您可以直接更改产品。

您可以使用FirstOrDefaultSingleOrDefault(在多个上引发异常)根据给定的 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"});
}
于 2013-09-05T07:53:14.770 回答
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);
于 2013-09-05T07:53:20.943 回答
2

不知道,也许您正在寻找类似的东西Find

var product = company.Products.Find(p => p.Id == productId);
if (product != null)
    product.Permissions.Add(permission)
于 2013-09-05T07:53:21.687 回答
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);

在上述解决方案中,您不需要在要添加权限的每一段代码中检查空列表。你只会在一个地方拥有它...

于 2013-09-05T07:54:18.013 回答
0
CurrentProduct.Permissions.Add(new ProductPermission() {GuidId=System.Guid.NewGuid(), Name="HeyMega"});

你可以在一行中做到这一点!

于 2013-09-05T07:53:53.010 回答
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);
于 2013-09-05T07:55:21.953 回答