我有一个对象列表(位置)。每个位置都可以有多个类别。我有一个整数列表(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;
这仅适用于一个类别,我不知道如何修复代码以比较附加到位置的所有类别。
答案 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)));