使用 PetaPoco 从 PostgreSQL 返回记录 ID
Returning record ID's from PostgreSQL using PetaPoco
PetaPoco PostgreSQL 11.1
我正在尝试获取已删除记录 ID 的列表。这不起作用:
var sql = new Sql()
.Append(@"; WITH _in (lastname, firstname, birthdate, description, dencounter) AS (
VALUES ( UPPER(@0), UPPER(@1), @2::date, LOWER(@3), @4::date )
)
DELETE FROM dx d
USING _in n
JOIN patients pt ON (pt.lastname, pt.firstname, pt.birthdate) = (n.lastname, n.firstname, n.birthdate)
JOIN disease z ON (z.description = n.description)
WHERE (d.patient_recid, d.disease_recid, d.dposted)=(pt.recid, z.recid, n.dencounter)
RETURNING d.recid;", lastName, firstName, birthDate, description, tencounter);
return db.Fetch<int?>(sql);
RETURNING 未兑现。 (我收到显示删除成功的“1”,而不是 recid 值)。它在 pgAdmin 4 中正确运行。
有没有办法用 PetaPoco(和 C#)做到这一点?我不仅要寻找一个 recid,还要寻找一个 IEnumerable of int?来自许多删除。
TIA
我花了一点时间才明白这里发生了什么。
Fetch<T>
运行查询,returns 将结果集设置为类型化列表。直接来自文档。
您可能需要遵守其中的打字部分。
希望下面的内容演示了正在发生的事情。
public class TypedReturn {
public string recid { get; set; }
}
var sql = new Sql()
.Append(@"; WITH _in (lastname, firstname, birthdate, description, dencounter) AS (
VALUES ( UPPER(@0), UPPER(@1), @2::date, LOWER(@3), @4::date )
)
DELETE FROM dx d
USING _in n
JOIN patients pt ON (pt.lastname, pt.firstname, pt.birthdate) = (n.lastname, n.firstname, n.birthdate)
JOIN disease z ON (z.description = n.description)
WHERE (d.patient_recid, d.disease_recid, d.dposted)=(pt.recid, z.recid, n.dencounter)
RETURNING d.recid;", lastName, firstName, birthDate, description, tencounter);
List<TypedReturn> returnValues = db.Fetch<TypedReturn>(sql);
foreach(var returnValue in returnValues)
{
Console.WriteLine(returnValue.recid);
}
或者您可以使用 dynamic
,您愿意这样做
var sql = new Sql()
.Append(@"; WITH _in (lastname, firstname, birthdate, description, dencounter) AS (
VALUES ( UPPER(@0), UPPER(@1), @2::date, LOWER(@3), @4::date )
)
DELETE FROM dx d
USING _in n
JOIN patients pt ON (pt.lastname, pt.firstname, pt.birthdate) = (n.lastname, n.firstname, n.birthdate)
JOIN disease z ON (z.description = n.description)
WHERE (d.patient_recid, d.disease_recid, d.dposted)=(pt.recid, z.recid, n.dencounter)
RETURNING d.recid;", lastName, firstName, birthDate, description, tencounter);
List<dynamic> returnValues = db.Fetch<dynamic>(sql);
foreach(var returnValue in returnValues)
{
Console.WriteLine(returnValue.recid);
}
PetaPoco PostgreSQL 11.1
我正在尝试获取已删除记录 ID 的列表。这不起作用:
var sql = new Sql()
.Append(@"; WITH _in (lastname, firstname, birthdate, description, dencounter) AS (
VALUES ( UPPER(@0), UPPER(@1), @2::date, LOWER(@3), @4::date )
)
DELETE FROM dx d
USING _in n
JOIN patients pt ON (pt.lastname, pt.firstname, pt.birthdate) = (n.lastname, n.firstname, n.birthdate)
JOIN disease z ON (z.description = n.description)
WHERE (d.patient_recid, d.disease_recid, d.dposted)=(pt.recid, z.recid, n.dencounter)
RETURNING d.recid;", lastName, firstName, birthDate, description, tencounter);
return db.Fetch<int?>(sql);
RETURNING 未兑现。 (我收到显示删除成功的“1”,而不是 recid 值)。它在 pgAdmin 4 中正确运行。
有没有办法用 PetaPoco(和 C#)做到这一点?我不仅要寻找一个 recid,还要寻找一个 IEnumerable of int?来自许多删除。
TIA
我花了一点时间才明白这里发生了什么。
Fetch<T>
运行查询,returns 将结果集设置为类型化列表。直接来自文档。
您可能需要遵守其中的打字部分。
希望下面的内容演示了正在发生的事情。
public class TypedReturn {
public string recid { get; set; }
}
var sql = new Sql()
.Append(@"; WITH _in (lastname, firstname, birthdate, description, dencounter) AS (
VALUES ( UPPER(@0), UPPER(@1), @2::date, LOWER(@3), @4::date )
)
DELETE FROM dx d
USING _in n
JOIN patients pt ON (pt.lastname, pt.firstname, pt.birthdate) = (n.lastname, n.firstname, n.birthdate)
JOIN disease z ON (z.description = n.description)
WHERE (d.patient_recid, d.disease_recid, d.dposted)=(pt.recid, z.recid, n.dencounter)
RETURNING d.recid;", lastName, firstName, birthDate, description, tencounter);
List<TypedReturn> returnValues = db.Fetch<TypedReturn>(sql);
foreach(var returnValue in returnValues)
{
Console.WriteLine(returnValue.recid);
}
或者您可以使用 dynamic
,您愿意这样做
var sql = new Sql()
.Append(@"; WITH _in (lastname, firstname, birthdate, description, dencounter) AS (
VALUES ( UPPER(@0), UPPER(@1), @2::date, LOWER(@3), @4::date )
)
DELETE FROM dx d
USING _in n
JOIN patients pt ON (pt.lastname, pt.firstname, pt.birthdate) = (n.lastname, n.firstname, n.birthdate)
JOIN disease z ON (z.description = n.description)
WHERE (d.patient_recid, d.disease_recid, d.dposted)=(pt.recid, z.recid, n.dencounter)
RETURNING d.recid;", lastName, firstName, birthDate, description, tencounter);
List<dynamic> returnValues = db.Fetch<dynamic>(sql);
foreach(var returnValue in returnValues)
{
Console.WriteLine(returnValue.recid);
}