根据另一个集合(子)过滤linq集合(父级)

时间:2017-06-17 16:04:52

标签: c# asp.net-mvc linq

我正在根据子集合过滤集合。

我的模型如下:

首先

    public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public double Price { get; set; }
        public double Stock { get; set; }
        public Category Category { get; set; }
        public string ImagePath { get; set; }
}

和第二

    public class Category
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool isSelected { get; set; }
    }

和一个用于将其传递给我的视图的ViewModel

public class ProductsVM
{
    public IList<Item> items { get; set; }
    public IList<Category> categories { get; set; }

}

和我的动作方法,我获取类别列表(视图中的复选框)。

以下代码成功运行,删除了未选择的类别。

    productsVm.categories.RemoveAll(x => x.isSelected == false);

现在我想要只选择类别的项目。

我试过了

    List<Item> items = db.Items.ToList();
    List<Item> filter = items.Where(x => !categories.Any( y=> y.Id == x.Category.Id)).ToList();

   var model = (from it in db.Items
                join ct in productsVm.categories
                on it.Category.Id equals ct.Id
                select it).ToList();

            List<Item> items = db.Items.ToList();
            List<Item> filter = items.RemoveAll(x => productsVm.categories.Contains(x.Category.Id));

1 个答案:

答案 0 :(得分:0)

仅使用类别ID:

var ids=productsVm.categories.Select(c=>c.Id);//.Distinct();
//Using the ids collection now you can filter the item like and IN in sql
var query=db.Items.Where(i=>ids.Contains(i.Category.Id));