3

CRM 2011に対してlinqクエリを実行していますが、次のエラーが発生し続けます。

'where'条件が無効です。エンティティメンバーが無効なプロパティまたはメソッドを呼び出しています。

私のコードは次のようになります。

        try
        {

            string rsmName = "Bob Harrison";
            var linqQuery = (from r in gServiceContext.CreateQuery("opportunity")
                             join c in gServiceContext.CreateQuery("account") on ((EntityReference) r["accountid"]).Id equals c["accountid"] into opp
                             from o in opp.DefaultIfEmpty()
                             where ((EntityReference)r["ownerid"]).Name.Equals(rsmName)
                             select new
                                        {
                                            AccountId = !r.Contains("accountid") ? string.Empty : r["accountid"],
                                            Account = !o.Contains("name") ? string.Empty : o["name"]
                                        });

            ddlCustomer.DataSource = linqQuery;
            ddlCustomer.DataValueField = "AccountId";
            ddlCustomer.DataTextField = "Account";
            ddlCustomer.DataBind();
        }
        catch (Exception ex)
        {
        }

これを修正する方法はありますか?

ありがとう!

4

2 に答える 2

2

CRM Linq プロバイダーの機能が制限されており、クエリが複雑すぎるようです。FetchXmlを使用してみてください。

于 2012-05-30T13:22:03.843 に答える
1

問題は Linq プロバイダーではなく、EntityReferences の問題です。EntityReference残念ながらドキュメントはありませんが、名前を取るコンストラクタがないため、別の方法で設定されていない限り、通常は null であると推測されます。

とにかく、これはを介して行われるのと同じ方法でを介して行うことができます -テーブルをクエリすることによって。以下を参照してください (遅延バインディングに変換する必要があります)。SystemUser

var linqQuery = from r in gServiceContext.OpportunitySet
                join c in gServiceContext.AccountSet on r.AccountId.Id equals c.AccountId into opp
                from o in opp.DefaultIfEmpty()
                where o.OwnerId.Id == gServiceContext.SystemUserSet.Single(y => y.FullName.Equals(rsmName)).SystemUserId
                select new
                {
                    AccountId = !r.Contains("accountid") ? string.Empty : r["accountid"],
                    Account = !o.Contains("name") ? string.Empty : o["name"]
                };
于 2012-05-30T14:28:43.127 に答える