1

奇怪的事情正在发生。

如果我这样做:

        var allAccountsQuery = from acc in baseQ
                               where
                                   //high potential check - 1, 2, 3
                               (acc.mcpl_potencjal_klienta == 1 || acc.mcpl_potencjal_klienta == 2 || acc.mcpl_potencjal_klienta == 3) &&
                                   //directors block check
                               ((acc.mcpl_blokada_dyrektorska == true && acc.mcpl_blokada_do <= date) || acc.mcpl_blokada_dyrektorska == false || acc.mcpl_blokada_dyrektorska == null) &&
                                   //sack assign date check
                               (acc.mcpl_dataprzypisaniazworka == null || acc.mcpl_dataprzypisaniazworka < date) &&
                                   //owner change check
                               (acc.mcpl_datazmianywasciciela == null || acc.mcpl_datazmianywasciciela < date) &&
                                   //creation date check
                                   //TODO:For testing!
                                   //(acc.mcpl_data_utworzenia_test < date)
                               (acc.createdon < date)
                               select acc;

        var joinQuery = from acc in allAccountsQuery
                        join opp in ctx.opportunityopportunities on acc.accountid equals opp.customerid.Value
                        select new
                        {
                            Account = acc,
                            Opportunity = opp
                        };

        Plugins.Common.XrmHelper.ClearCache("account");
        var joinResult = joinQuery.ToList();

然后我会在执行这个查询时得到一个未知的平台错误。我需要将整个where子句从复制粘贴allAccountsQueryjoinQuerybaseQ再次使用,然后它就可以工作了。

这里发生了什么?我认为只要您不执行任何不受支持的操作,您就可以安全地加入 LINQ 查询。

PS。最奇怪的部分是粘贴的代码将在略有不同的where条件下工作。

聚苯乙烯。baseQ只是一个更简单的where查询,就像allAccountsQuery.

4

2 回答 2

0

也许不是答案,但由于我无法发表评论,也没有人回答,我认为这可能会有所帮助。为什么你不在第一个查询中加入?据我所知,LINQ CRM 查询在我们有 OR 谓词的子句中加入表时存在问题,而不是当我们尝试从不同的表中进行选择时,我认为查询应该可以工作。我有一篇文章解释了我学到的东西。

于 2013-01-23T14:28:55.083 回答
0

与其他提供程序生命 EF 或 Linq-to-SQL 相比,Linq-to-CRM 支持的操作集有限。

对两个查询中的一个或两个进行补水可能会取得更好的成功。由于您的account查询有 where 子句,请尝试对其进行补水:

var joinQuery = from acc in allAccountsQuery.ToList()   // call ToList() to hydrate the query
                join opp in ctx.opportunityopportunities
                   on acc.accountid equals opp.customerid.Value
                select new
                {
                    Account = acc,
                    Opportunity = opp
                };

如果您的人数较多,Opportunities您可能希望在执行Join.

于 2013-01-23T14:41:25.993 回答