无法在具有拥有实体的 class 上使用 linq 进行查询

Unable to query with linq on a class with an Owned Entity

我有一个这样的实体,其中 属性 被映射为一个拥有的实体:

public class Foo
{
    public int Id { get; set; }

    public DateTimeWithTimeZone DoneAt { get; set; }
} 

public class DateTimeWithTimeZone
{
    public DateTimeOffset Time { get; set; }

    public string TimeZone { get; set; }
}

数据库配置如下所示:

public void Configure(EntityTypeBuilder<Foo> builder)
{
    builder.HasKey(x => x.Id);

    builder.OwnsOne(x => x.DoneAt, y =>
    {
        y.WithOwner();
        y.Property(z => z.Time).HasColumnName("DoneAt");
        y.Property(z => z.TimeZone).HasColumnName("DoneAtTimeZone");
    });
}

我可以使用 EF 将 Foo 实体插入到数据库中,并为数据库取回 Foos 列表:

var list = apiDbContext.Foos.ToList();
var list = apiDbContext.Foos.FirstOrDefault(x => x.Id == 1122);

但是当我查询 LastOrDefault 时:

var p = apiDbContext.Foos.LastOrDefault(x => x.Id == 1122);

我收到这个错误:

System.InvalidOperationException: 'The LINQ expression 'DbSet<Prescription>
    .Where(p => p.Id == 1122)
    .Select(p => (IncludeExpression(
        EF.Property<DateTimeWithTimeZone>(p, "DoneAt"), DoneAt)
    ))
    .Last()' could not be translated. 
Either rewrite the query in a form that can be translated, or 
switch to client evaluation explicitly 
by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync().

原因是在使用 .LastOrDefault() 时需要指定 OrderBy。

这是有效的:

var p = apiDbContext.Foos.OrderBy(x => x.Id).LastOrDefault(x => x.Filter == 1122);