【问题标题】:How to extract the ID of a Category from Product using Product ID如何使用产品 ID 从产品中提取类别的 ID
【发布时间】:2017-05-26 10:48:51
【问题描述】:

我正在尝试编写一个 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 =&gt; p.Products.Select(x =&gt; x.Id == id));

【问题讨论】:

  • 重定向请求重定向到什么?您是否尝试过自己编写任何 LINQ?你到底在纠结什么?
  • 你想要哪个ID?你想要的输出是什么?
  • 看看我更新的答案
  • 我认为您需要将类别 ID 保存在 Product 表中。

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


【解决方案1】:

假设 id 包含您的产品 ID:

var catId = db.Categories.Single(category =&gt; category.Products.Any(product =&gt; 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
}

【讨论】:

    【解决方案2】:

    假设产品存在并且属于任何类别,以下应该可以工作:

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

    【讨论】:

    • 我在Product 对象中看不到Category 属性
    • 抱歉,问题已编辑。将相应地编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2015-05-27
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多