2012-09-10 76 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));