Dotnet - 按 Resource.Effective 过滤 FHIR 包

Dotnet - Filtering a FHIR Bundle by Resource.Effective

我一直在尝试通过 'Effective' 属性执行资源过滤,但在过去的几个小时里我似乎 运行 一直在兜圈子,我想知道是否有人可以给我一个处理这个。我们一直使用的过滤方式是'Select('query'),如下图。 (res 是 Bundle 类型)

这个有效:

var selectedResource = res.Select("entry.resource.where(id = '" + resourceId + "')").FirstOrDefault();

这个有效:

var filteredResources = res.Select("entry.resource.ofType(" + resourceType + ")");

这不起作用:(在 QuickWatch 上执行以下代码)

尝试 #1

描述 - 试图与解释为字符串的“2016-01-01”进行比较

res.Select("entry.resource.where(effective>='2016-01-01')"), results

“运算符 '>=' 的调用失败:无法将 2016-08-31T06:57:24-04:00(类型 Hl7.Fhir.ElementModel.Types.DateTime)与 2016-01-01(类型 Hl7.Fhir.ElementModel.Types.String), 因为类型不同。"

尝试#2

描述 - 保留引号 (' '),但将内部的值更改为实际的 DateTime 初始化

res.Select("entry.resource.where(effective>='"+new DateTime(2016,1,1)+"')"), results

“调用运算符 '>=' 失败:无法将 2016-08-31T06:57:24-04:00(Hl7.Fhir.ElementModel.Types.DateTime 类型)与 01/01/2016 00:00:00 进行比较(类型 Hl7.Fhir.ElementModel.Types.String),因为类型不同。"

尝试 #3

描述 - 前一个但没有引号 (' ') - 预计被视为字符串

res.Select("entry.resource.where(effective>="+new DateTime(2016,1,1)+")")

"编译失败:解析失败:意外'(';预期输入结束(第 1 行,第 21 列);最近消耗:urce.where"

有人知道如何让这个日期比较起作用吗?

请告诉我是否有任何进一步的信息可以帮助您分析问题。

提前致谢!

亲切的问候, 自动对焦

这在 firely-net-sdk 的讨论帖中得到了回答:https://github.com/FirelyTeam/firely-net-sdk/discussions/1924

引用: DateTime 文字以 @ 开头。另请参阅 FhirPath 规范:http://hl7.org/fhirpath/#datetime

所以试着写这样的表达式: res.Select("entry.resource.where(effective >= @2016-01-01)");