Leadtools.Dicom.Common
LEAD Technologies, Inc

DirectoryRecord<T> Method

Example 





The entity type of the query.
The dataset that holds information on a DICOM basic directory.
Represents a typed query against a DICOMDIR file.
Syntax
[ExtensionAttribute()]
public static Queryable<T> DirectoryRecord<T>( 
   DicomDataSet dataset
)
'Declaration
 
<ExtensionAttribute()>
Public Shared Function DirectoryRecord(Of T)( _
   ByVal dataset As DicomDataSet _
) As Queryable(Of T)
'Usage
 
Dim dataset As DicomDataSet
Dim value As Queryable(Of T)
 
value = LinqExtensions.DirectoryRecord(Of T)(dataset)
[ExtensionAttribute()]
public static Queryable<T> DirectoryRecord<T>( 
   DicomDataSet dataset
)
ExtensionAttribute()
 function Leadtools.Dicom.Common.Linq.BasicDirectory.LinqExtensions.DirectoryRecord( 
   dataset 
)
[ExtensionAttribute()]
public:
static Queryable<T^>^ DirectoryRecordgeneric<typename T>
( 
   DicomDataSet^ dataset
) 

Parameters

dataset
The dataset that holds information on a DICOM basic directory.

Type Parameters

T
The entity type of the query.

Return Value

A object that provides LINQ based access to a DICOM basic directory.
Remarks
This extension method represents a query that returns a collection of zero or more objects of a specific type. A valid DICOMDIR must be present in the dataset parameter before a query can be executed. A DICOMDIR query will be executed in the following scenarios:

The following operations are provided by the DICOMDIR LINQ Provider.

Example
Copy CodeCopy Code  
<DicomKey(DicomDirKeyType.Patient)> _
Public Class PatientEntity
   <Element(DicomTag.PatientID)> _
   Public Property Id() As String
      Get
         Return m_Id
      End Get
      Set(ByVal value As String)
         m_Id = value
      End Set
   End Property
   Private m_Id As String

   <Element(DicomTag.PatientName)> _
   Public Property Name() As String
      Get
         Return m_Name
      End Get
      Set(ByVal value As String)
         m_Name = value
      End Set
   End Property
   Private m_Name As String
End Class

<DicomKey(DicomDirKeyType.Study)> _
Public Class StudyEntity
   <Element(DicomTag.PatientID)> _
   <DicomKey(DicomDirKeyType.Patient)> _
   Public Property PatientId() As String
      Get
         Return m_PatientId
      End Get
      Set(ByVal value As String)
         m_PatientId = value
      End Set
   End Property
   Private m_PatientId As String

   <Element(DicomTag.StudyDate)> _
   Public Property [Date]() As System.Nullable(Of DateTime)
      Get
         Return m_Date
      End Get
      Set(ByVal value As System.Nullable(Of DateTime))
         m_Date = value
      End Set
   End Property
   Private m_Date As System.Nullable(Of DateTime)

   <Element(DicomTag.StudyTime)> _
   Public Property Time() As System.Nullable(Of DateTime)
      Get
         Return m_Time
      End Get
      Set(ByVal value As System.Nullable(Of DateTime))
         m_Time = value
      End Set
   End Property
   Private m_Time As System.Nullable(Of DateTime)

   <Element(DicomTag.StudyDescription)> _
   Public Property Description() As String
      Get
         Return m_Description
      End Get
      Set(ByVal value As String)
         m_Description = value
      End Set
   End Property
   Private m_Description As String

   <Element(DicomTag.StudyInstanceUID)> _
   Public Property InstanceUID() As String
      Get
         Return m_InstanceUID
      End Get
      Set(ByVal value As String)
         m_InstanceUID = value
      End Set
   End Property
   Private m_InstanceUID As String

   <Element(DicomTag.StudyID)> _
   Public Property Id() As String
      Get
         Return m_Id
      End Get
      Set(ByVal value As String)
         m_Id = value
      End Set
   End Property
   Private m_Id As String

   <Element(DicomTag.AccessionNumber)> _
   Public Property AccessionNumber() As String
      Get
         Return m_AccessionNumber
      End Get
      Set(ByVal value As String)
         m_AccessionNumber = value
      End Set
   End Property
   Private m_AccessionNumber As String
End Class


Public Sub TestDicomLinq()
   DicomEngine.Startup()

   Using ds As New DicomDataSet()
      ds.Load(_DicomDirFile, DicomDataSetLoadFlags.None)
      FindPatients(ds)
      FindStudies(ds)
      FindPatientStudy(ds)
   End Using

   DicomEngine.Shutdown()
End Sub

Private Sub FindPatients(ByVal ds As DicomDataSet)
   Dim patients = From patient In ds.DirectoryRecord(Of PatientEntity)() _
                  Select Name = patient.Name, Id = patient.Id

   For Each patient In patients
      Console.WriteLine("Id: " & Convert.ToString(patient.Id))
      Console.WriteLine("Name: " & Convert.ToString(patient.Name))
   Next
End Sub

Private Sub FindStudies(ByVal ds As DicomDataSet)
   Dim studies = From study In ds.DirectoryRecord(Of StudyEntity)() _
         Select study

   For Each study In studies
      Console.WriteLine("Patient Id: " & Convert.ToString(study.PatientId))
      Console.WriteLine("Accession #: " & Convert.ToString(study.AccessionNumber))
      Console.WriteLine("Study Id: " & Convert.ToString(study.Id))
   Next
End Sub

Private Sub FindPatientStudy(ByVal ds As DicomDataSet)
   Dim query = From patient In ds.DirectoryRecord(Of PatientEntity)() _
               Select _
    patient, _
    Studies = From study In ds.DirectoryRecord(Of StudyEntity)() Where study.PatientId = patient.Id _
              Select study

   For Each item In query
      Console.WriteLine("Patient: " & Convert.ToString(item.patient.Id))
      For Each study As StudyEntity In item.Studies
         Console.WriteLine("    Instance UID: " + study.InstanceUID)
      Next
   Next
End Sub
[DicomKey(DicomDirKeyType.Patient)]
public class PatientEntity
{
    [Element(DicomTag.PatientID)]
    public string Id
    {
        get;
        set;
    }

    [Element(DicomTag.PatientName)]
    public string Name
    {
        get;
        set;
    }
}

[DicomKey(DicomDirKeyType.Study)]
public class StudyEntity
{
    [Element(DicomTag.PatientID)]
    [DicomKey(DicomDirKeyType.Patient)]
    public string PatientId
    {
        get;
        set;
    }

    [Element(DicomTag.StudyDate)]
    public DateTime? Date
    {
        get;
        set;
    }

    [Element(DicomTag.StudyTime)]
    public DateTime? Time
    {
        get;
        set;
    }

    [Element(DicomTag.StudyDescription)]
    public string Description
    {
        get;
        set;
    }

    [Element(DicomTag.StudyInstanceUID)]
    public string InstanceUID
    {
        get;
        set;
    }

    [Element(DicomTag.StudyID)]
    public string Id
    {
        get;
        set;
    }

    [Element(DicomTag.AccessionNumber)]
    public string AccessionNumber
    {
        get;
        set;
    }
}


public void TestDicomLinq()
{
    DicomEngine.Startup();

    using (DicomDataSet ds = new DicomDataSet())
    {
        ds.Load(_DicomDirFile, DicomDataSetLoadFlags.None);
        FindPatients(ds);
        FindStudies(ds);
        FindPatientStudy(ds);
    }

    DicomEngine.Shutdown();
}

private void FindPatients(DicomDataSet ds)
{
    var patients = from patient in ds.DirectoryRecord<PatientEntity>()
                   select new { Name = patient.Name, Id = patient.Id };

    foreach (var patient in patients)
    {
        Console.WriteLine("Id: " + patient.Id);
        Console.WriteLine("Name: " + patient.Name);
    }
}

private void FindStudies(DicomDataSet ds)
{
     var studies = from study in ds.DirectoryRecord<StudyEntity>()
                   select study;

     foreach (var study in studies)
     {
         Console.WriteLine("Patient Id: " + study.PatientId);
         Console.WriteLine("Accession #: " + study.AccessionNumber);
         Console.WriteLine("Study Id: " +study.Id);
     }
}

private void FindPatientStudy(DicomDataSet ds)
{
    var query = from patient in ds.DirectoryRecord<PatientEntity>()                      
                select new
                {
                    patient,
                    Studies = from study in ds.DirectoryRecord<StudyEntity>()
                              where study.PatientId == patient.Id
                              select study
                };

    foreach (var item in query)
    {
        Console.WriteLine("Patient: " + item.patient.Id);
        foreach (StudyEntity study in item.Studies)
        {
            Console.WriteLine("    Instance UID: " + study.InstanceUID);
        }
    }
}
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

LinqExtensions Class
LinqExtensions Members

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.

Leadtools.Dicom.Common requires a Document or Medical toolkit license and unlock key. For more information, refer to: Imaging Pro/Document/Medical Features