我是很新的实体框架核心(更确切地说Npgsql.EFCore.PostgresSQL
5.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
,它可以工作。
var response = await context.wkbObject.FromSqlRaw(rawRequest2);
不工作