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;

これは 1 つのカテゴリでのみ機能します。コードを修正して、場所に関連付けられているすべてのカテゴリを比較する方法がわかりません。

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 に答える