【问题标题】:Is there a way to view LINQ Generated query expressions in CRM Dynamics?有没有办法在 CRM Dynamics 中查看 LINQ 生成的查询表达式?
【发布时间】:2017-08-07 10:26:58
【问题描述】:

考虑到 CRM Dynamics 中的 LINQ 查询被转换为查询表达式 (source):

[...] OrganizationServiceContext 类包含一个底层 LINQ 从 Microsoft Visual C# 转换 LINQ 查询的查询提供程序 或 Microsoft Visual Basic .NET 语法到由 微软动态 CRM。 [...]

有没有办法查看生成的查询表达式(因为可以在 Linq-to-Sql 或 Linq-to-Entities 中查看生成的 SQL 查询)?

【问题讨论】:

    标签: linq dynamics-crm


    【解决方案1】:

    您可以使用反射来获取查询对象,然后将其转换为 FetchXML 查询以获取可打印的查询。这适用于早期绑定和后期绑定查询。

    发件人:https://pogo69.wordpress.com/2012/04/05/crm-linq-provider-converting-expressions-to-queryexpression-andor-fetchxml/

    var connectionString = @"SET YOUR CONNECTION STRING";
    
    var service = new CrmServiceClient(connectionString);   
    
    using (var xrm = service.OrganizationServiceProxy)
    {
    
        OrganizationServiceContext orgContext =
                    new OrganizationServiceContext(xrm);
    
        var query = from c in orgContext.CreateQuery("contact")
                    join a in orgContext.CreateQuery("account")
                        on c["contactid"] equals a["primarycontactid"]
                    where (String)c["lastname"] == "Wilcox" ||
                        (String)c["lastname"] == "Andrews"
                    where ((String)a["address1_telephone1"]).Contains("(206)")
                        || ((String)a["address1_telephone1"]).Contains("(425)")
                    select new
                    {
                        Contact = new
                        {
                            FirstName = c["firstname"],
                            LastName = c["lastname"]
                        },
                        Account = new
                        {
                            Address1_Telephone1 = a["address1_telephone1"]
                        }
                    };
    
        IQueryProvider queryProvider = query.Provider;      
    
        MethodInfo translateMethodInfo = queryProvider.GetType().GetMethod("Translate");
        QueryExpression queryEx = (QueryExpression)translateMethodInfo.Invoke(queryProvider, new object[] { query.Expression });        
    
        QueryExpressionToFetchXmlRequest reqConvertToFetchXml = new QueryExpressionToFetchXmlRequest { Query = queryEx };
        QueryExpressionToFetchXmlResponse respConvertToFetchXml = (QueryExpressionToFetchXmlResponse)xrm.Execute(reqConvertToFetchXml);
    
        Console.WriteLine("To FetchXML:" + Environment.NewLine + Environment.NewLine);
        Console.WriteLine(respConvertToFetchXml.FetchXml);
    

    或者,您可以使用 Fiddler 来捕获在 SOAP 消息中发送的实际查询文本。我以前做过,但没有发现它比 FetchXml 更有价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多