This documentation is archived and is not being maintained.

How to: Execute a Query that Returns StructuralType Results

This topic shows how to execute a command against a conceptual model by using an EntityCommand object, and how to retrieve the StructuralType results by using an EntityDataReader. The EntityType, RowType and ComplexType classes derive from the StructuralType class.

To run the code in this example

  1. Add the AdventureWorks Sales Model to your project and configure your project to use the Entity Framework. For more information, see How to: Use the Entity Data Model Wizard.

  2. In the code page for your application, add the following using statements (Imports in Visual Basic):

    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Data.Common;
    using System.Data;
    using System.IO;
    using System.Data.SqlClient;
    using System.Data.EntityClient;
    using System.Data.Metadata.Edm;


This example executes a query that returns EntityType results. If you pass the following query as an argument to the ExecuteStructuralTypeQuery function, the function displays details about the Products:

SELECT VALUE Product FROM AdventureWorksEntities.Products AS Product

If you pass a parameterized query, like the following, add the EntityParameter objects to the Parameters property on the EntityCommand object.

SELECT VALUE product FROM AdventureWorksEntities.Products 
    AS product where product.ListPrice >= @price

static void ExecuteStructuralTypeQuery(string esqlQuery)
    if (esqlQuery.Length == 0)
        Console.WriteLine("The query string is empty.");

    using (EntityConnection conn =
        new EntityConnection("name=AdventureWorksEntities"))

        // Create an EntityCommand.
        using (EntityCommand cmd = conn.CreateCommand())
            cmd.CommandText = esqlQuery;
            // Execute the command.
            using (EntityDataReader rdr =
                // Start reading results.
                while (rdr.Read())
                    StructuralTypeVisitRecord(rdr as IExtendedDataRecord);

static void StructuralTypeVisitRecord(IExtendedDataRecord record)
    int fieldCount = record.DataRecordInfo.FieldMetadata.Count;
    for (int fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++)
        Console.Write(record.GetName(fieldIndex) + ": ");

        // If the field is flagged as DbNull, the shape of the value is undetermined.
        // An attempt to get such a value may trigger an exception.
        if (record.IsDBNull(fieldIndex) == false)
            BuiltInTypeKind fieldTypeKind = record.DataRecordInfo.FieldMetadata[fieldIndex].
            // The EntityType, ComplexType and RowType are structural types
            // that have members. 
            // Read only the PrimitiveType members of this structural type.
            if (fieldTypeKind == BuiltInTypeKind.PrimitiveType)
                // Primitive types are surfaced as plain objects.

See Also