2012-09-10 79 views
0

我有一個對象列表(位置)。每個位置可以有多個類別。我有一個整數列表(CategoryId's)。在此基礎上我需要過濾的位置:如何篩選我需要多個動態篩選參數的列表

List<int> categoriesToLoad = new List<int>(); 
// fill list 
var allLocations = locationRepository.GetLocations().Where(... 
var filteredLocations = from m in model 
          where categoriesToLoad.Contains(m.LocationCategories.FirstOrDefault() == null ? -1 : m.LocationCategories.FirstOrDefault().PlaceCategoryId) 
          select m; 

這僅適用於一類,我不知道如何解決代碼比較附加到位置的所有類別。

+1

您可以使用'Any' http://stackoverflow.com/a/1757244/381422 – xdumaine

回答

1

你想Any

var filteredLocations = 
     model.Where(m => m.LocationsCategories 
      .Any(c => categoriesToLoad.Contains(c.PlaceCategoryId))); 
1

嘗試更換此:

var filteredLocations = from m in model 
         where categoriesToLoad.Contains(m.LocationCategories.FirstOrDefault() == null ? -1 : m.LocationCategories.FirstOrDefault().PlaceCategoryId) 
         select m; 

與此:

var filteredLocations = from m in model 
         where m.LocationCategories.Any(x => categoriesToLoad.Contains(x.PlaceCategoryId) 
         select m; 

雖然我真的不明白完全你想要做什麼,什麼是您的應用程序的邏輯,所以可能我所說的都是廢話。

1

你可以做財產以後這樣的:

var filteredLocations = locationRepository 
          .GetLocations() 
          .Where(l => l.LocationCategories.Any(x => categoriesToLoad.Contains(x.PlaceCategoryId));