我正在尝试从Entity Framework Core 3中具有一对多关系的两个表中获取数据。代表这些表的模型如下所示。一个人可以有多个PersonNotes。我需要通过传递PersonId来查询PersonNotes表。我目前收到一条错误消息,指出“人”不包含“包含”的定义。如何制定此查询。
class Person
{
[Key]
public int Id { get; set; }
public List<PersonNote> PersonNotes { get; set; }
}
class PersonNote
{
[Key]
public int Id { get; set; }
public int PersonId { get; set; }
}
class StackOverflow : DbContext
{
public DbSet<Person> Persons { get; set; }
public DbSet<PersonNote> PersonNotes { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasMany(p => p.PersonNotes)
.WithOne()
.HasForeignKey(p => p.PersonId);
}
}
查询
public IEnumerable<PersonNote> GetPersonNotes(int personId)
{
var PersonNotes1 = PersonNotes.Where(p => Person.Contains(p.Id));
return PersonNotes1;
}
答案 0 :(得分:0)
通过一个 PersonNotes
获得PersonID
:
IQueryable<PersonNote> GetPersonNotesSingleId(int ID) =>
context.PersonNotes.Where(p => p.PersonId == ID);
要通过多个 PersonNotes
s获得PersonID
:
IQueryable<PersonNote> GetPersonNotesMultipleId(IEnumerable<int> IDs) =>
context.PersonNotes.Where(p => IDs.Contains(p.PersonId));
最后一个查询将生成IN
T-SQL子句:
var notes = GetPersonNotesMultipleId(new[] { 1, 2, 3 });