使用另外两个实体来过滤实体中的数据

时间:2014-06-24 23:07:21

标签: c# linq entity-framework asp.net-web-api entity-framework-4

我有以下三个数据表:

public partial class category
{
    public category()
    {
        this.subcategory = new HashSet<subcategory>();
    }

    public int category_id { get; set; }
    public string description { get; set; }
    public virtual ICollection<subcategory> subcategory { get; set; }
}

第二个实体

 public partial class subcategory
    {
        public subcategory()
        {
            this.tracked_item = new HashSet<item>();
        }

        public int subcategory_id { get; set; }
        public int category_id { get; set; }
        public string description { get; set; } 
        public virtual ICollection<item> item { get; set; }
        public virtual category category { get; set; }
    }

第三实体

public partial class item
{
    public int item_id { get; set; }
    public string serial_number { get; set; }
    public string inventory_number { get; set; }
    public int subcategory_id { get; set; }
    public Nullable<int> manu_id { get; set; }}
    public virtual subcategory subcategory { get; set; }
    public virtual manu manu { get; set; }
}

我正在尝试在我的web api中编写一个方法,我希望使用这样的三个参数来过滤数据 使用项目作为上下文

public IEnumerable<filteredItems> GetfilterItem(int category_id, int subcategory_id, int manu_id)
{
  return DbSet.Where(c=>c.category_id=category_id && c.subcategory_id && subcategory_id && c.manu_id =manu_d).Select(d=> new filteredItems() {
 ----
}:

我遇到问题.Where(c=>c.category_id=category_id && c.subcategory_id && subcategory_id && c.manu_id =manu_d) Intellisense不会通过category_id它无法转到subcategory_idmanu_id

请让我知道如何正确编写此查询,以便我可以根据三个变量过滤数据。

2 个答案:

答案 0 :(得分:0)

2件事:

  1. ==表示等效。 =用于分配。
    1. 因此c.category_id=category_id应为c.category_id==category_id
  2. c.subcategory_id && subcategory_id看起来像是一个错字。
    1. 应该使用==代替&&
  3. 所以你的代码是:

    public IEnumerable<filteredItems> GetfilterItem(int category_id, 
                                                    int subcategory_id, 
                                                    int manu_id)
    {
      return DbSet.Where(c=>c.category_id == category_id 
                         && c.subcategory_id == subcategory_id 
                         && c.manu_id == manu_d)
                  .Select(d=> new filteredItems {
                                                  ----
                                                });
    }
    

答案 1 :(得分:0)

首先,您使用=代替==,因此您不会进行比较。

其次,&&c.subcategory_id之间的subcategory_id代替==

试试这个:

public IEnumerable<filteredItems> GetfilterItem(int category_id, int subcategory_id, int manu_id)
{
    return DbSet.Where(c => c.category_id == category_id
                            && c.subcategory_id == subcategory_id
                            && c.manu_id == manu_d)
                .Select(d => new filteredItems
                                 {
                                     // populate object
                                 };
}