4

ユーザーチームのメンバーシップ(N:Nの関係)を返す簡単なクエリを作成しました。これはすべてのユーザーに対して正常に機能しますが、特定のユーザーに制限するwhere句を追加すると、障害例外がスローされます(以下のスタックトレースを参照)。

不思議なことに、これは「where Users.FullName.StartsWith( "Alex")」で正常に機能します。Dynamics CRM SDK LINQの実装は、where句のガイドをサポートしていませんか?

何かアドバイス?

サンプルコード

 using (var service = new OrganizationService("Xrm"))
        {
            using (var xrm = new XrmServiceContext(service))
            {
                var AlexUser = xrm.SystemUserSet.Where(p => p.FullName.StartsWith("Alex")).First();
                var AlexID = AlexUser.Id;

                var Test =
                        from Users in xrm.SystemUserSet
                        join TeamMemberships in xrm.TeamMembershipSet on Users.Id equals TeamMemberships.SystemUserId
                        join Teams in xrm.TeamSet on TeamMemberships.TeamId equals Teams.Id
                        where Users.Id == AlexID     // <-- problematic where clause
                        orderby Users.FullName
                        select new
                        {
                            FullName = Users.FullName,
                            UserID = Users.Id,
                            TeamName = Teams.Name
                        };

                var Test1 = Test.ToList();
            }
        }

スタックトレース

サーバースタックトレース:System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation、ProxyRpc&rpc)at System.ServiceModel.Channels.ServiceChannel.Call(String action、Boolean oneway、ProxyOperationRuntime operation、Object [] ins、Object [] outs 、TimeSpanタイムアウト)at System.ServiceModel.Channels.ServiceChannel.Call(String action、Boolean oneway、ProxyOperationRuntime operation、Object [] ins、Object [] outs)at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall、ProxyOperationRuntime operation )System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageメッセージ)で

[0]で再スローされた例外:System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg、IMessage retMsg)at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData、Int32 type)atMicrosoft.Xrm。 Sdk.IOrganizationService.Execute(OrganizationRequest request)at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.ExecuteCore(OrganizationRequest request)at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.Execute(OrganizationRequest request)atMicrosoft.Xrm.Client.Services。 OrganizationService。<>c__DisplayClass19.b__18(IOrganizationService s)at Microsoft.Xrm.Client.Services.OrganizationService.InnerOrganizationService.UsingService [TResult](Func2 action) at Microsoft.Xrm.Client.Services.OrganizationService.Execute(OrganizationRequest request) at Microsoft.Xrm.Sdk.Client.OrganizationServiceContext.Execute(OrganizationRequest request) at Microsoft.Xrm.Sdk.Linq.QueryProvider.RetrieveEntityCollection(OrganizationRequest request, NavigationSource source) at Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute(QueryExpression qe, Boolean throwIfSequenceIsEmpty, Boolean throwIfSequenceNotSingle, Projection projection, NavigationSource source, List1 linkLookups、String&pagingCookie、Boolean&moreRecords)at Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute [TElement](QueryExpression qe、Boolean throwIfSequenceIsEmpty、Boolean throwIfSequenceNotSingle、Projection Projection、NavigationSource source、List 1 linkLookups) at Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute[TElement](Expression expression) at Microsoft.Xrm.Sdk.Linq.QueryProvider.GetEnumerator[TElement](Expression expression) at Microsoft.Xrm.Sdk.Linq.Query1.GetEnumerator()at System.Collections .Generic.List 1..ctor(IEnumerable1コレクション)
System.Linq.Enumerable.ToList [TSource](IEnumerable`1 source)at aspirets.crm.test.Program.Main(String [] args)in C:\ Users \ a_marshall \ document \ visual studio 2010 \ Projects \ aspirets .crm \ aspirets.crm.test \ Program.cs:line 37 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly、String [] args)at System.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity、String [] args)at Microsoft
System.Threading.ThreadHelper.ThreadStart_Context(Object state)の.VisualStudio.HostingProcess.HostProc.RunUsersAssembly( )
System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態、ブール値ignoreSyncCtx)at System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)at System.Threading.ThreadHelper.ThreadStart()

4

1 に答える 1

6

の代わりにUsers.Id、を試してくださいUsers.SystemUserId。同様に、の代わりにTeams.Id、を試してくださいTeams.TeamId

これが機能する理由については、これを記載しているドキュメントはありませんが、生成されたアーリーバインディングファイルのエンティティはから継承するためEntity、必ずIdプロパティがあります。ただし、アーリーバウンドOrganizationServiceContextはエンティティ属性をCRMデータベースに直接マップするため、テーブルにId列が含まれていないIdため、LINQプロバイダーで属性を使用しても機能しないため、実際のデータベースを使用する必要があります。スキーマ名。

于 2012-04-24T14:07:20.443 に答える