Share via

QueryExpression Class


Applies To: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Contains a complex query expressed in a hierarchy of expressions.

Namespace:   Microsoft.Xrm.Sdk.Query
Assembly:  Microsoft.Xrm.Sdk (in Microsoft.Xrm.Sdk.dll)

Inheritance Hierarchy



[DataContractAttribute(Name = "QueryExpression", Namespace = "")]
public sealed class QueryExpression : QueryBase
<DataContractAttribute(Name := "QueryExpression", Namespace := "")>
Public NotInheritable Class QueryExpression
    Inherits QueryBase


Name Description
System_CAPS_pubmethod QueryExpression()

Initializes a new instance of the QueryExpression class.

System_CAPS_pubmethod QueryExpression(String)

Initializes a new instance of the QueryExpression class setting the entity name.


Name Description
System_CAPS_pubproperty ColumnSet

Gets or sets the columns to include.

System_CAPS_pubproperty Criteria

Gets or sets the complex condition and logical filter expressions that filter the results of the query.

System_CAPS_pubproperty Distinct

Gets or sets whether the results of the query contain duplicate entity instances.

System_CAPS_pubproperty EntityName

Gets or sets the logical name of the entity.

System_CAPS_pubproperty ExtensionData

Gets or sets the structure that contains extra data.(Inherited from QueryBase.)

System_CAPS_pubproperty LinkEntities

Gets a collection of the links between multiple entity types.

System_CAPS_pubproperty NoLock

Gets or sets a value that indicates that no shared locks are issued against the data that would prohibit other transactions from modifying the data in the records returned from the query.

System_CAPS_pubproperty Orders

Gets the order in which the entity instances are returned from the query.

System_CAPS_pubproperty PageInfo

Gets or sets the number of pages and the number of entity instances per page returned from the query.

System_CAPS_pubproperty TopCount

Gets or sets the number of rows to be returned.


Name Description
System_CAPS_pubmethod AddLink(String, String, String)

Adds the specified link to the query expression setting the entity name to link to, the attribute name to link from and the attribute name to link to.

System_CAPS_pubmethod AddLink(String, String, String, JoinOperator)

Adds the specified link to the query expression setting the entity name to link to, the attribute name to link from and the attribute name to link to.

System_CAPS_pubmethod AddOrder(String, OrderType)

Adds the specified order expression to the query expression.

System_CAPS_pubmethod Equals(Object)

(Inherited from Object.)

System_CAPS_pubmethod GetHashCode()

(Inherited from Object.)

System_CAPS_pubmethod GetType()

(Inherited from Object.)

System_CAPS_pubmethod ToString()

(Inherited from Object.)


QueryExpression provides an object model to construct a query. Queries can also be created using FetchXML, a proprietary XML based query language. You can convert queries between FetchXML and QueryExpression using FetchXmlToQueryExpressionRequest and QueryExpressionToFetchXmlRequest messages. More information: Sample: Convert queries between Fetch and QueryExpression.


// Build the following SQL query using QueryExpression:
//      SELECT contact.fullname, contact.address1_telephone1
//      FROM contact
//          LEFT OUTER JOIN account
//              ON contact.parentcustomerid = account.accountid
//              AND
//     = 'Litware, Inc.'
//      WHERE (contact.address1_stateorprovince = 'WA'
//      AND
//          contact.address1_city in ('Redmond', 'Bellevue', 'Kirkland', 'Seattle')
//      AND 
//          contact.address1_telephone1 like '(206)%'
//          OR
//          contact.address1_telephone1 like '(425)%'
//      AND
//          DATEDIFF(DAY, contact.createdon, GETDATE()) > 0
//      AND
//          DATEDIFF(DAY, contact.createdon, GETDATE()) < 30
//      AND
//          contact.emailaddress1 Not NULL
//             )

QueryExpression query = new QueryExpression()
    Distinct = false,
    EntityName = Contact.EntityLogicalName,
    ColumnSet = new ColumnSet("fullname", "address1_telephone1"),
    LinkEntities = 
        new LinkEntity 
            JoinOperator = JoinOperator.LeftOuter,
            LinkFromAttributeName = "parentcustomerid",
            LinkFromEntityName = Contact.EntityLogicalName,
            LinkToAttributeName = "accountid",
            LinkToEntityName = Account.EntityLogicalName,
            LinkCriteria = 
                Conditions = 
                    new ConditionExpression("name", ConditionOperator.Equal, "Litware, Inc.")
    Criteria =
        Filters = 
            new FilterExpression
                FilterOperator = LogicalOperator.And,
                Conditions = 
                    new ConditionExpression("address1_stateorprovince", ConditionOperator.Equal, "WA"),
                    new ConditionExpression("address1_city", ConditionOperator.In, new String[] {"Redmond", "Bellevue" , "Kirkland", "Seattle"}),
                    new ConditionExpression("createdon", ConditionOperator.LastXDays, 30),
                    new ConditionExpression("emailaddress1", ConditionOperator.NotNull)
            new FilterExpression
                FilterOperator = LogicalOperator.Or,
                Conditions =
                    new ConditionExpression("address1_telephone1", ConditionOperator.Like, "(206)%"),
                    new ConditionExpression("address1_telephone1", ConditionOperator.Like, "(425)%")

DataCollection<Entity> entityCollection = _service.RetrieveMultiple(query).Entities;

// Display the results.
Console.WriteLine("List all contacts matching specified parameters");
foreach (Contact contact in entityCollection)
    Console.WriteLine("Contact ID: {0}", contact.Id);
    Console.WriteLine("Contact Name: {0}", contact.FullName);
    Console.WriteLine("Contact Phone: {0}", contact.Address1_Telephone1);
Console.WriteLine("<End of Listing>");

Thread Safety

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

Microsoft.Xrm.Sdk.Query Namespace
Build queries with QueryExpression
Sample: Retrieve multiple with the QueryExpression class
Sample: Query connection roles by entity type code (early bound)

Return to top

Microsoft Dynamics 365

© 2016 Microsoft. All rights reserved. Copyright