Также отлично работает для не-Boolen полей, например: .Where (x => x.WorkPlaces.Any (y => y.Id == 1))

ользую новое ядро ​​.net и EF.

Мне нужна помощь с командой include linq. У меня есть некоторые модели 1: N, и если коллекция содержит некоторые данные, помеченные как удаленные, я не хочу их включать.

Как это сделать?

var company = await _context.Company
                .Include(y => y.Administrators)
                .Include(y => y.CompanyPartTimers)
                .Include(z => z.WorkPlaces)
                .Include(z => z.Requirements)
                .FirstAsync(x => x.Id == id);

Если я добавлю условие

.Include(z => z.WorkPlaces).Where(x=>x.WorkPlaces.Where(x=>!x.IsDeleted))

Не работает Как правильно написать это?

Следующее, что у меня есть IDeletable Interface, было бы лучше, если бы у меня было какое-то пользовательское выражение linq, и я мог бы это сделать для ex.

.Include(z => z.WorkPlaces).GetNonDeleted()

Кто-нибудь знает как это делать? Я пробовал что-то подобное

public static class LinqExtension
    {
        public static IEnumerable<T> GetActive<T>(this IEnumerable<T> source) where T : class, IDeletable
        {
            return source.Where(x => x.IsDeleted);
        }
    }

Спасибо, парни.

 Fals22 нояб. 2017 г., 18:59
Измените x => x.WorkPlaces.Where (x =>! X.IsDeleted) на x => x.WorkPlaces.Any (x =>! X.IsDeleted)
 CodeGhost22 нояб. 2017 г., 19:06
"It doesn't work" Вы получаете ошибку? Отличный результат, чем ожидалось?
 Charles30 нояб. 2017 г., 21:49
@JardaLanger, вы решили эту проблему?
 Jarda Langer22 нояб. 2017 г., 19:09
это ошибка компиляции
 Jarda Langer01 дек. 2017 г., 23:03
Да, я использовал этот способ в ссылке ниже, используя Фильтр запросов.docs.microsoft.com/en-us/ef/core/querying/filters

Ответы на вопрос(2)

Решение Вопроса

Вы можете настроитьФильтр запросов в вашем DbContext.

modelBuilder.Entity<Administrator>()
            .HasQueryFilter(admin => !EF.Property<boolean>(admin, "IsDeleted"));

должен сделать трюк

Ссылка ссылка:https://docs.microsoft.com/en-us/ef/core/querying/filters

Вы должны изменить внутреннее состояние, используяAny вместоWhere, как:

.Include(z => z.WorkPlaces)
.Where(x => x.WorkPlaces.Any(y => !y.IsDeleted))
 fuzzy_logic15 мар. 2019 г., 11:10
Также отлично работает для не-Boolen полей, например: .Where (x => x.WorkPlaces.Any (y => y.Id == 1))

Ваш ответ на вопрос