次の方法で共有


QueryExpression クラス

適用対象: CRM 2015 on-prem, CRM Online

Contains a complex query expressed in a hierarchy of expressions.

名前空間: Microsoft.Xrm.Sdk.Query
アセンブリ: Microsoft.Xrm.Sdk (Microsoft.Xrm.Sdk.dll に含まれる)

構文

'宣言
<DataContractAttribute(Name:="QueryExpression", Namespace:="https://schemas.microsoft.com/xrm/2011/Contracts")> _
Public NotInheritable Class QueryExpression
    Inherits QueryBase
[DataContractAttribute(Name="QueryExpression", Namespace="https://schemas.microsoft.com/xrm/2011/Contracts")] 
public sealed class QueryExpression : QueryBase

// 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
//               )

String fetchXml = @"<fetch mapping=""logical"" count=""50"" version=""1.0"">
                        <entity name=""contact"">
                            <attribute name=""address1_telephone1"" />
                            <attribute name=""contactid"" />
                            <attribute name=""firstname"" />
                            <attribute name=""lastname"" />
                            <filter>
                                <condition attribute=""address1_stateorprovince"" operator=""eq"" value=""WA"" />
                                <condition attribute=""address1_city"" operator=""in"">
                                    <value>Redmond</value>
                                    <value>Bellevue</value>
                                    <value>Kirkland</value>
                                    <value>Seattle</value>
                                </condition>
                                <condition attribute=""createdon"" operator=""last-x-days"" value=""30"" />
                                <condition attribute=""emailaddress1"" operator=""not-null"" />
                                <filter type=""or"">
                                    <condition attribute=""address1_telephone1"" operator=""like"" value=""(206)%"" />
                                    <condition attribute=""address1_telephone1"" operator=""like"" value=""(425)%"" />
                                </filter>
                            </filter>
                            <link-entity name=""account"" from=""accountid"" to=""parentcustomerid"">
                                <filter>
                                    <condition attribute=""name"" operator=""eq"" value=""Litware, Inc."" />
                                </filter>
                            </link-entity>
                        </entity>
                    </fetch>";

// Build fetch request and obtain results.
RetrieveMultipleRequest efr = new RetrieveMultipleRequest()
{
    Query = new FetchExpression(fetchXml)
};

EntityCollection entityResults = ((RetrieveMultipleResponse)_service.Execute(efr)).EntityCollection;
 

// Display the results.
Console.WriteLine("List all contacts matching specified parameters");
Console.WriteLine("===============================================");
foreach (var e in entityResults.Entities)
{
    Console.WriteLine("Contact ID: {0}", e.Id);
}


Console.WriteLine("<End of Listing>");
Console.WriteLine();
// 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();

備考

A query expression can be expressed as FetchXML or as a hierarchy of expressions.

継承階層

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

スレッド セーフ

この種類のパブリックな静的 (Visual Basic では Shared) メンバーはスレッド セーフです。インスタンス メンバーがスレッド セーフであることは保証されません。

プラットフォーム

開発プラットフォーム

Windows Vista、Windows Server 2003、および

対象プラットフォーム

Windows Vista、Windows XP

Change History

関連項目

参照

QueryExpression のメンバー
Microsoft.Xrm.Sdk.Query 名前空間

他のリソース

Build Queries with QueryExpression
Sample: Retrieve Multiple with Query Expression
Sample: Query Connection Roles by Entity Type Code (Early Bound)

Send comments about this topic to Microsoft.
© 2014 Microsoft Corporation. All rights reserved.