我正在使用 IncludeMany 和 Reference 属性来获取包含相关列表的表。我的代码看起来有点像这样,它可以工作。
[TableName("Person")]
[PrimaryKey("Id")]
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
[Reference(ReferenceType.Many, ColumnName = "Id", ReferenceMemberName = "PersonId")]
public List<Address> Addresses { get; set; } = new List<Address>();
}
[TableName("Address")]
[PrimaryKey("Id")]
public class Address
{
public int Id { get; set; }
public int PersonId { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public AddressStatus Status { get; set; }
}
...
public async Task<People[]> GetPeople()
{
var query = _database.QueryAsync<People>()
.IncludeMany(s => s.Address);
var people = await query.ToArray();
foreach(var person in people)
{
person.Addresses = person.Addresses.Where(x => x.Status == AddressStatus.Active).ToList();
}
return people;
}
我的问题是,我怎样才能使这项工作,以便我过滤数据库上的地址?我想删除 foreach 外观,以便NPoco查询仅从数据库中带回过滤后的数据。另外,如果可能的话,我想避免使用内联 SQL。