【发布时间】:2019-12-13 22:09:41
【问题描述】:
我已尝试减少此示例以删除 OrganizationServiceProxy/XrmServiceContext,但现在我相信问题源于那里。我正在使用 Microsoft 的 CrmSvcUtil.exe 生成的代码从 Dynamics 365 实例中提取数据。这是相关的sn-p:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
CrmServiceClient client = new CrmServiceClient(userName, CrmServiceClient.MakeSecureString(password), string.Empty, orgName, isOffice365: true);
using (OrganizationServiceProxy service = client.OrganizationServiceProxy)
{
XrmServiceContext crm = new XrmServiceContext(service);
var q = crm.CreateQuery<Account>();
List<Account> accounts = q.Where(x => x.AccountNumber != x.dynamics_integrationkey).ToList();
}
我得到以下异常:
从范围“”引用了“{company-specific}.Account”类型的变量“x”,但未定义
这发生在 Linq 实际执行时的最后一行。只有当它通过 Microsoft.Xrm.Sdk.Client.OrganizationServiceContext 创建时,我才会收到错误消息。
我检查过的内容:
- 在比较同一对象(不仅仅是帐户)上的任意两个字段时,即使两者的数据类型完全相同。
- 如果我将
crm.CreateQuery...替换为手动填充的List...AsQueryable(),则 Linq 可以正常工作 - 最令人沮丧的是,如果我通过带有
List<Account> a = q.ToList();的中间列表首先对结果集进行光栅化,那么这一切都可以正常工作。因为我已经放弃了任何延迟加载,所以运行需要更长的时间,但它可以正常运行。 - 我查看了与 从范围''引用但未定义 Linq 错误相关的其他答案,但它们都是关于格式错误的 Linq。我知道这个 Linq 格式正确,因为如果我更改底层 Queryable,它就可以正常工作。
显然 List...ToQueryable() 和由 XrmServiceContext 创建的 Microsoft.Xrm.Sdk.Linq.Query (从 Microsoft. Xrm.Sdk.Client.OrganizationServiceContext),但我不知道它是什么。
【问题讨论】:
标签: c# linq dynamics-crm microsoft-dynamics