QueryExpression Class


Updated: November 29, 2016

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)


[DataContractAttribute(Name = "QueryExpression", Namespace = "http://schemas.microsoft.com/xrm/2011/Contracts")]
public sealed class QueryExpression : QueryBase


Initializes a new instance of the QueryExpression class.


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


Gets or sets the columns to include.


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


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


Gets or sets the logical name of the entity.


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


Gets a collection of the links between multiple entity types.


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.


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


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


Gets or sets the number of rows to be returned.

System_CAPS_pubmethodAddLink(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_pubmethodAddLink(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_pubmethodAddOrder(String, OrderType)

Adds the specified order expression to the query expression.


(Inherited from Object.)


(Inherited from Object.)


(Inherited from Object.)


(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
//				account.name = '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>");

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

Return to top

Microsoft Dynamics 365

© 2016 Microsoft. All rights reserved. Copyright