加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Microsoft Dynamics 2011 N:N LINQ查询,其中where子句包含Guid

发布时间:2020-12-14 03:52:15 所属栏目:Windows 来源:网络整理
导读:我构建了一个简单的查询来返回用户团队成员资格(N:N关系).这适用于所有用户,但是当我添加一个where子句来限制特定用户时,它会抛出一个错误异常(请参阅下面的stacktrace). 奇怪的是,这适用于“Where Users.FullName.StartsWith(”Alex“)”. Dynamics CRM SD
我构建了一个简单的查询来返回用户团队成员资格(N:N关系).这适用于所有用户,但是当我添加一个where子句来限制特定用户时,它会抛出一个错误异常(请参阅下面的stacktrace).

奇怪的是,这适用于“Where Users.FullName.StartsWith(”Alex“)”. Dynamics CRM SDK LINQ实现不支持where子句中的Guids吗?

有什么建议?

示例代码

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();
            }
        }

堆栈跟踪:

Server stack trace: at
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 timeout) at
System.ServiceModel.Channels.ServiceChannel.Call(String action,
Object[] outs) at
System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage
methodCall,ProxyOperationRuntime operation) at
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage
message)

Exception rethrown at [0]: at
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage
reqMsg,IMessage retMsg) at
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgData,Int32 type) at
Microsoft.Xrm.Sdk.IOrganizationService.Execute(OrganizationRequest
request) at
Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.ExecuteCore(OrganizationRequest
request) at
Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.Execute(OrganizationRequest
request) at
Microsoft.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,List
1 linkLookups,
String& pagingCookie,Boolean& moreRecords) at
Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute[TElement](QueryExpression
qe,Boolean throwIfSequenceIsEmpty,List1 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.Query
1.GetEnumerator() at
System.Collections.Generic.List1..ctor(IEnumerable1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at
aspirets.crm.test.Program.Main(String[] args) in
C:Usersa_marshalldocumentsvisual studio
2010Projectsaspirets.crmaspirets.crm.testProgram.cs:line 37 at
System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String[]
args) at System.AppDomain.ExecuteAssembly(String assemblyFile,
Evidence assemblySecurity,String[] args) at
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext,ContextCallback callback,Object state,Boolean
ignoreSyncCtx) at
System.Threading.ExecutionContext.Run(ExecutionContext
executionContext,Object state) at
System.Threading.ThreadHelper.ThreadStart()

解决方法

而不是Users.Id,请尝试Users.SystemUserId.同样,代替Teams.Id,尝试Teams.TeamId.

至于其工作原因,我不知道任何说明这一点的文档,但由于生成的早期绑定文件中的实体继承自Entity,它们必然具有Id属性.但是,因为早期绑定的OrganizationServiceContext将实体属性直接映射到CRM数据库,其表格不包含Id列,使用Id属性和LINQ提供程序将不起作用,因此您必须使用实际的数据库/模式名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读