Мне нужно получить чаты, в которых текущий пользователь является участником, и я хочу получить только активных пользователей.
Я выполняю следующий запрос:
var query = _db.Chats
.Include(c => c.Participants.Where(cu=>cu.IsActive))
.Include(c=>c.LastMessage)
.ThenInclude(m => m.Sender)
.ThenInclude(cu => cu.User)
.Where(c =>
c.Participants.Any(cu => cu.UserId == _currentUser.MessengerUserId))
.OrderByDescending(c => c.LastMessage != null ? c.LastMessage.Timestamp : c.Created)
.AsNoTracking();
но часть фильтрации участников не работает - включены все пользователи, в то время как она работает по назначению с условием «выбрать только чаты с текущим пользователем в качестве участника».
Вы можете отправить шоу-классы? Можете ли вы сказать версию EF? Можете ли вы увидеть, что tsql сгенерирован (когда вы выполняете запрос, вы можете получить данные)?
@NetMage Я использую EF Core 7 (кажется) с NpgSql.
Мне это точно не нужно. Просто нужно выбрать только активных участников для чатов
@abolfazlsadeghi github.com/Rostand-Corp/flitch-backend/tree/develop/src/Domain/… для сущностей. Код, который я написал выше, в настоящее время отсутствует в репозитории.
Вы говорите, что «часть фильтрации участников не работает», а не «все пользователи включены» — какая часть не работает в коде? Вы пытаетесь фильтровать участников или пользователей?
@NetMage Я хочу отфильтровать участников. Я хочу, чтобы в полученном List<Chat> были только активные участники. Но на данный момент в него входят все участники вне зависимости от статуса. Я переместил AsNoTracking() в самый верх и удалил предложение Where(), которое у меня было внизу, просто для проверки, и оно все еще не работает (все еще включает каждого пользователя)
Я обнаружил, что наличие Select() в запросе затеняет фильтры Include. Внизу запроса у меня есть Mapster, выполняющий свой ProjectTo, который, как я полагаю, является Select(). Завтра я проверю





Это было решено. Прочитав некоторую документацию, я понял, что Select() затеняет Include(). В запросе у меня был метод расширения Mapster ProjectToType<>(), который, как мне кажется, выполнил некоторые выборки (что также объясняет, почему были включены некоторые не включенные свойства). После удаления ProjectToType<>() все стало работать нормально, так как Selects исчез.
Какой LINQ вы используете: LINQ to EF 4.x/EF 6.x/EF Core 2.0/2.1/3.x/5.x/6.x/7.x/8.x? Какой поставщик базы данных?