我正在根据子集合过滤集合。
我的模型如下:
首先
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));
答案 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));