如何使用产品ID从产品中提取类别的ID

时间:2017-01-11 15:12:06

标签: c# asp.net linq model-view-controller

我正在尝试编写LINQ查询以获取要在重定向请求中使用的类别的ID。我将获得的唯一信息是产品ID。所有产品均属于1类。

当我点击"类别/索引/中的类别时,我将被带到"产品/索引/ [类别ID]"包含特定于该类别ID的所有产品。当我删除其中一个产品时,产品控制器的删除操作应该将我重定向到同一页面"产品/索引/ [类别ID]"。目前我被引导到"产品/索引"这是无效的请求。我需要转到请求中带有类别ID的索引页面。

public class Category
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public Byte[] Image { get; set; }
        public virtual ICollection<Product> Products { get; set; }
    }

public class Product
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public Byte[] Image { get; set; }
    [Required]
    public Decimal Price { get; set; }
}

到目前为止,我有:

var catID = db.Categories.SelectMany(p => p.Products.Select(x => x.Id == id));

2 个答案:

答案 0 :(得分:2)

假设id包含您的产品ID:

var catId = db.Categories.Single(category => category.Products.Any(product => product.Id == id)).Id

如果任何类别中不存在给定的id,则会抛出异常。如果您不想这样,可以使用:

var category = db.Categories.SingleOrDefault(category => category.Products.Any(product => product.Id == id));
if (category == null)
{
    // handle error
}
else
{
    var catId = category.Id;
    // do your work with catId
}

答案 1 :(得分:0)

假设产品存在且属于任何类别,则以下内容应该有效:

db.Categories.Single(c => c.Products.Any(p => p.Id == id)).Id