すべてのクエリをQueryExpressionからLinqに変更したいと思います。開発時には、すべて問題ないように見えますが、実行時に常にキャスト例外が発生します(Microsoft.xrm.sdk.entityをXrm.SystemUserにキャストすることはできません-> XrmはCrmSvcUtilで生成された初期バインドクラスです)。
var context = new OrganizationServiceContext(crmService);
SystemUser x = (from c in context.CreateQuery<SystemUser>()
where c.DomainName == @"pfgc\" + Environment.UserName
select c).FirstOrDefault();
このコードは簡単です。Where句なしで試したことがありますが、何も変わりません。
私は次のことを試しました(SystemUserの代わりにFirstOrDefaultとvarはありません)
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);
}