如何过滤我需要多个动态过滤器参数的列表

时间:2012-09-10 20:58:27

标签: c# linq entity-framework

我有一个对象列表(位置)。每个位置都可以有多个类别。我有一个整数列表(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;

这仅适用于一个类别,我不知道如何修复代码以比较附加到位置的所有类别。

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以这样做:

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

答案 2 :(得分:1)

你想要Any

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