使用 EF Core 从 PostgreSQL 查询 bytea 值的长度

Query the length of a bytea value from PostgreSQL with EF Core

在我的带有 Entity Framework Core 和 Npgsql 的 .NET Core 应用程序中,我想查询包含二进制数据的记录。但有时我不需要实际数据,只需要它的字节长度。那将是这样的查询:

dbContext.BinaryFiles
    .Select(f => new
    {
        Name = f.Name,
        Length = f.Data.Length
    }
    .ToList();

文件 class 如下所示:

public class BinaryFile
{
    public string Name { get; set; }
    public byte[] Data { get; set; }
}

DbContext 包含一个 DbSet<BinaryFile>。 table 定义为:

create table binary_files
(
    id serial primary key,
    name varchar(200) not null,
    data bytea not null
);

当我尝试此操作时,出现错误:Npgsql.PostgresException:“42883:函数基数 (bytea) 不存在”。生成的查询是这样的:

SELECT b.name AS "Name", cardinality(b.data) AS "Length"
FROM binary_files AS b

当我以交互方式尝试此查询时,我得到了一个结果:

SELECT b.name AS "Name", LENGTH(b.data) AS "Length"
FROM binary_files AS b

所以问题是 .NET Array.Length 属性 没有被翻译成足够的 SQL LENGTH 函数,而是其他东西。

这是错误还是我使用不当?我怎样才能只得到想要的数据?

版本:

翻译字节数组的长度还没有实现...使用 https://github.com/npgsql/efcore.pg/issues/1226 跟踪这个。 EF Core 主要提供程序(SqlServer 和 Sqlite)最近合并了对此的支持,仅适用于 5.0。