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)

System.Object
  Microsoft.Xrm.Sdk.Query.QueryBase
    Microsoft.Xrm.Sdk.Query.QueryExpression

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

NameDescription
System_CAPS_pubmethodQueryExpression()

Initializes a new instance of the QueryExpression class.

System_CAPS_pubmethodQueryExpression(String)

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

NameDescription
System_CAPS_pubpropertyColumnSet

Gets or sets the columns to include.

System_CAPS_pubpropertyCriteria

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

System_CAPS_pubpropertyDistinct

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

System_CAPS_pubpropertyEntityName

Gets or sets the logical name of the entity.

System_CAPS_pubpropertyExtensionData

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

System_CAPS_pubpropertyLinkEntities

Gets a collection of the links between multiple entity types.

System_CAPS_pubpropertyNoLock

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_pubpropertyOrders

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

System_CAPS_pubpropertyPageInfo

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

System_CAPS_pubpropertyTopCount

Gets or sets the number of rows to be returned.

NameDescription
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.

System_CAPS_pubmethodEquals(Object)

(Inherited from Object.)

System_CAPS_pubmethodGetHashCode()

(Inherited from Object.)

System_CAPS_pubmethodGetType()

(Inherited from Object.)

System_CAPS_pubmethodToString()

(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");
Console.WriteLine("===============================================");
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>");
Console.WriteLine();

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

Community Additions

ADD
Show: