我的数据模型不适合 2 列中的行选择



我是很新的实体框架核心(更确切地说Npgsql.EFCore.PostgresSQL5.0.0),我需要你的帮助。

我要根据id列表选择表中的一些数据,我还想从表中的另一列中获取数据,这些列描述了这里的几何形状。换句话说,我的选择将返回2列。此外,响应必须与我的id列表保持相同的顺序。

目前,我使用以下原始SQL:

String rawRequest = "SELECT Ids, ST_AsBinary(geom_wkb) as geom_wkb" +
"FROM {SCHEMA}.{Table}"  +
"JOIN UNNEST(ARRAY["+ {List_of_Ids_To_retrieve +"]::bigint[]) "+
"WITH ORDINALITY route(Ids, ordering) USING(Ids)";

最后我把它叫做

var response =  context.wkbObject
.FromSqlRaw(rawRequest);

知道我的数据模型是:

[Table("one_table")]
public class wkbObject
{
[Column("Ids")]
[Key]
public long[] Ids { get; set; }
[Column ("geom_wkb ")]
public byte[] geom_wkb { get; set; }
}

当我想对响应

进行循环时
foreach (var wkb in response)
{
/// Do stuff on the geom.. 
}

似乎编译器在子句"in"处关闭,似乎数据模型不适合。我得到了这个错误:

系统。InvalidCastException: Can't cast database type bigint to Int64[]

为什么?

我的问题是:

  • 为什么不工作:😉

  • 我的类型转换问题来自哪里?

  • 我的数据模型是正确的吗?我不太清楚,如果我在一列中选择几行,如果我需要一个列表(或不)在数据模型中?写这篇文章时,我意识到我有一个长id数组,但我有一个简单的字节数组(我需要一个字节数组列表吗?)。

  • 响应的数据结构是怎样的?我需要使用ToList()函数吗?

  • 我的请求可以用Link写吗?这样更好吗?

  • 是否有可能以异步方式做到这一点?

当我点击发送我的问题时,我明白哪里是转换错误。在我的数据模型中,我将long[]更改为long,它可以工作。

但是我仍然需要你的帮助。使用Linq更好吗?如何以异步方式实现呢?var response = await context.wkbObject.FromSqlRaw(rawRequest2);不工作

最新更新