2017-06-17 249 views
0

我正在篩選基於子集合的集合。基於另一個集合(子)篩選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; } 
    } 

,併爲它傳遞給我的看法

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

} 

和我的行動一個ViewModel方法我在那裏得到類別列表(複選框在視圖中)。

下面的代碼在我刪除未選中的類別時成功運行。

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(); 

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

哈你試過items.Where(我=> i.Category.isSelected)? –

+0

這就是另一個問題,我認爲沒有返回我的ViewModel,它只返回產品中的類別VM。 –

回答

0

只能使用類別標識:

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)); 
+0

非常感謝@octavioccl。最後它工作。再次感謝。 :) –