C-FIND
约 363 字大约 1 分钟
PACSDICOMfo-dicomC-FIND
2026-03-20
C-FIND 用来查询 PACS 中的元数据。它返回的通常不是影像文件本身,而是患者、检查、序列或实例级别的信息。
1. 快速创建请求
fo-dicom 提供了一些快捷工厂方法。
按患者查询
var request = DicomCFindRequest.CreatePatientQuery(patientId, patientName);按检查查询
var request = DicomCFindRequest.CreateStudyQuery(
patientId,
patientName,
studyDateTime,
accession,
studyId,
modalitiesInStudy,
studyInstanceUid);按序列查询
var request = DicomCFindRequest.CreateSeriesQuery();2. 自定义查询
实际开发里,很多时候需要自己决定查询级别和返回字段,所以更常见的是手动构建:
var request = new DicomCFindRequest(DicomQueryRetrieveLevel.Study);常见查询级别包括:
PatientStudySeriesImage
然后按需补查询条件或要求返回的 Tag:
request.Dataset.Add(DicomTag.StudyInstanceUID, query.StudyInstanceUID);
request.Dataset.Add(DicomTag.StudyID, query.StudyID);
request.Dataset.Add(DicomTag.StudyDate, query.StudyDate);
request.Dataset.Add(DicomTag.StudyTime, query.StudyTime);
request.Dataset.Add(DicomTag.AccessionNumber, query.AccessionNumber);
request.Dataset.Add(DicomTag.StudyDescription, query.StudyDescription);
request.Dataset.Add(DicomTag.PatientID, query.PatientID);
request.Dataset.Add(DicomTag.PatientName, query.PatientName);
request.Dataset.Add(DicomTag.PatientSex, string.Empty);3. 处理响应
PACS 往往会分多次返回查询结果,所以通常要在响应事件里持续接收:
request.OnResponseReceived += (req, response) =>
{
if (response.Dataset == null) return;
result.Add(new PacsStudyInfo(response.Dataset)
{
Node = node
});
};4. 发送请求
var client = new DicomClient(pacsIp, pacsPort, false, localAet, remoteAet);
await client.AddRequestAsync(request);
await client.SendAsync();5. 使用建议
- 先明确查询级别,再决定要加哪些 Tag。
- 返回字段不是越多越好,字段越少,排查和适配通常越清晰。
- 如果准备从查询结果继续拉取影像,下一步通常就是 8.C-MOVE。