0

我有一个对象列表(位置)。每个位置都可以有多个类别。我有一个整数列表(CategoryId)。基于此,我需要过滤位置:

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;

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

4

3 回答 3

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;

虽然我并不完全了解您要做什么以及您的应用程序的逻辑是什么,但我所说的可能都是废话。

于 2012-09-10T21:04:54.970 回答
1

你可以这样做:

var filteredLocations = locationRepository
                            .GetLocations()
                            .Where(l => l.LocationCategories.Any(x => categoriesToLoad.Contains(x.PlaceCategoryId));
于 2012-09-10T21:04:55.270 回答
1

你想要Any

var filteredLocations = 
       model.Where(m => m.LocationsCategories
            .Any(c => categoriesToLoad.Contains(c.PlaceCategoryId)));
于 2012-09-10T21:05:18.783 回答