Фильтрация данных в объекте с использованием двух других объектов

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

#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; }
}
 

Я пытаюсь написать метод в своем веб-api, в котором я хочу фильтровать данные, используя три таких параметра
, используя элемент в качестве контекста

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

Проблема, с которой я сталкиваюсь, в .Where(c=>c.category_id=category_id amp;amp; c.subcategory_id amp;amp; subcategory_id amp;amp; c.manu_id =manu_d) том, что Intellisense не проходит category_id , он не может перейти к subcategory_id и manu_id

Пожалуйста, дайте мне знать, как правильно написать этот запрос, чтобы я мог фильтровать данные на основе трех переменных.

Ответ №1:

2 вещи:

  1. == показать эквивалентность. = для назначения.
    1. Так c.category_id=category_id должно быть c.category_id==category_id
  2. c.subcategory_id amp;amp; subcategory_id похоже на опечатку.
    1. Вероятно, следует использовать == вместо amp;amp;

Таким образом, ваш код будет:

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

Ответ №2:

Во-первых, вы используете = вместо == , поэтому вы не проводите сравнение.

Во-вторых, у вас есть amp;amp; между 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
                            amp;amp; c.subcategory_id == subcategory_id
                            amp;amp; c.manu_id == manu_d)
                .Select(d => new filteredItems
                                 {
                                     // populate object
                                 };
}