我想將所有查詢從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