Я использую. NET Core 3.1, который имеет некоторые отличия от pre. NET Core 3.0 вокруг запросов Linq от того, что я могу собрать: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#linq -queries-are-no-long- оценивали-на-клиент . Кажется, есть много информации о более ранних версиях. Net core, которые мне не совсем подходят. Все соединительные таблицы и сущности должны быть правильно настроены для автоматического создания c, поэтому я не буду добавлять их все, если кому-то не нужно их видеть. В свете этой ссылки мне также нужно быть осторожным, чтобы я не загружал всю базу данных заметок, которая в конечном итоге могла бы содержать миллионы строк. Некоторые советы по отслеживанию или отслеживанию, firstordefaultasyn c et c могут быть полезны, если это имеет значение. @Rena помогла мне с этим ранее, чтобы этот пример работал для одного запроса «многие ко многим», спасибо, Рена:
public async Task<List<Note>> GetAllNotesForNoteTypeAsync(string notetype)
{
var noteData = await context.Note
.Include(n => n.NoteNoteTypeJoins)
.ThenInclude(t => t.NoteType)
.ToListAsync();
var noteDataWithTypes = noteData.Where(i => i.NoteNoteTypeJoins.Any(x => x.NoteType.Type.ToString() == notetype))
.ToList();
return noteDataWithTypes;
}
У меня есть еще один запрос, который идет на один уровень глубже. Эти две попытки, приведенные ниже, очевидно, не работают, но они объясняют, что я пытаюсь сделать, пытаясь отфильтровать заметки по тексту группы заметок, то есть четыре таблицы удаляются через отношения два ко многим:
public async Task<List<Note>> GetAllNotesForNoteTypeGroupAsync(string notetypegroup)
{
var noteData = await context.Note
.Include(n => n.NoteNoteTypeJoins)
.ThenInclude(t => t.NoteType)
.ThenInclude(gt => gt.NoteTypeNoteTypeGroupJoins)
.ThenInclude(g => g.NoteTypeGroup)
.Where(g => g.NoteTypeGroup.Group == notetypegroup)
.ToListAsync();
return noteData;
}
или :
public async Task<List<Note>> GetAllNotesForNoteTypeGroupAsync(string notetypegroup)
{
var noteData = await context.Note
.Select(note => new
{
mytypejoin = note.NoteNoteTypeJoins
.Select(notetypejoin => new
{
mynotetype = notetypejoin.NoteType
.Select(notetype => new
{
mynotetype = notetype.NoteTypeNoteTypeGroupJoins
.Select(notetypegroupjoins => new
{
mytypegroup = notetypegroupjoins
.Where(i => i.NoteTypeNoteTypeGroupJoins
.Any(x => x.NoteTypeGroup.Group.ToString() == notetypegroup)
}),
}),
}),
});
return noteData;
Любая помощь будет принята с благодарностью, я новичок в этом, спасибо!
Вот комплимент Криса:
var noteData = await context.Note.Where(n =>
n.NoteNoteTypeJoins.Any(ntj =>
ntj.NoteType.NoteTypeNoteTypeGroupJoins.Any(ntg => ntg.NoteTypeGroup.Group == notetypegroup)))
.ToListAsync();