我想将所有查询从QueryExpression更改为Linq。在开发时,似乎都很好,但我总是在运行时得到一个转换异常(无法将Microsoft.xrm.sdk.entity转换为Xrm.SystemUser - > Xrm是使用CrmSvcUtil生成的早期界类)。LinqToCRM不能正确投射
var context = new OrganizationServiceContext(crmService);
SystemUser x = (from c in context.CreateQuery<SystemUser>()
where c.DomainName == @"pfgc\" + Environment.UserName
select c).FirstOrDefault();
此代码很简单。我甚至试过没有Where子句,它不会改变任何东西。
我尝试以下(无FirstOrDefault和VAR代替SystemUser)
var x = (from c in context.CreateQuery<SystemUser>()
where c.DomainName == @"pfgc\" + Environment.UserName
select c);
这不会抛出异常,但X型是Microsoft.xrm.sdk.linq.Query。我究竟做错了什么?这似乎正是SDK所要做的。
编辑:
GCATNM有正确的答案。万一有人面临着同样的问题,这里的工作代码示例:
public SystemUser GetCurrentUser()
{
var context = GetOrgContext();
return (from c in context.CreateQuery<SystemUser>()
where c.DomainName == @"pfgc\" + Environment.UserName
select c).FirstOrDefault();
}
public OrganizationServiceContext GetOrgContext()
{
var serviceProxy1 = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null);
serviceProxy1.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
return new OrganizationServiceContext(serviceProxy1);
}
这是解决方案。我在看错地方!非常感谢你! – Mathieu 2011-03-22 14:43:55
是的,但你可以使用这个:svcOrg.EnableProxyTypes();-) – Coolweb 2011-04-22 07:09:59
@Coolweb:确实,但我不知道那。 ;-) – TeaDrivenDev 2011-04-24 15:18:18