CRM 2011に対してLINQクエリをどのようにコンパイルしますか?
Microsoft.Xrm.Client.dllを使用してCRM2011に接続し、app.configファイルの接続文字列から生成されたMicrosoft.Xrm.Client.CrmOrganizationServiceContext_SvcContextを使用しています。私は次のLINQクエリを持っています。これはうまく機能します。
var vdiConfigDataSet =
(from SvrToPubProfSet in _SvcContext.vdi_publicationprofile_vdi_serverSet
join PubProfSet in _SvcContext.vdi_publicationprofileSet
on SvrToPubProfSet.vdi_publicationprofileid equals PubProfSet.Id
join SvrSet in _SvcContext.vdi_serverSet
on SvrToPubProfSet.vdi_serverid equals SvrSet.Id
where SvrSet.vdi_address == System.Environment.MachineName // This will ignore case
select new
{
// Data from Server record
RootPath = SvrSet.vdi_rootpath, // This is the same for all Publication Profiles
SvrAddr = SvrSet.vdi_address,
// Data from N:N relationship record(s) vdi_publicationprofile_vdi_serverSet
SvrId = SvrToPubProfSet.vdi_serverid,
PubProfId = SvrToPubProfSet.vdi_publicationprofileid,
// Data from Publication Profile record(s)
PubProfName = PubProfSet.vdi_name,
RelativePath = PubProfSet.vdi_relativepath,
ReportRelativePath = PubProfSet.vdi_reportrelativepath,
ReportFilenameSeed = PubProfSet.vdi_reportfilenameseed,
SubSystemType = PubProfSet.vdi_subsystemtype,
ModifiedOn = PubProfSet.ModifiedOn
}).ToList();
これは非常に大きなクエリであり、繰り返し実行されます。コンパイルしたいです。私は以下を試しました:
public static readonly Func<DataContext, Object> s_compiledQuery =
CompiledQuery.Compile<DataContext, Object>
(ctx =>
(from SvrToPubProfSet in ctx.GetTable<vdi_publicationprofile_vdi_server>()
join PubProfSet in ctx.GetTable<vdi_publicationprofile>()
on SvrToPubProfSet.vdi_publicationprofileid equals PubProfSet.Id
join SvrSet in ctx.GetTable<vdi_server>()
on SvrToPubProfSet.vdi_serverid equals SvrSet.Id
where SvrSet.vdi_address == System.Environment.MachineName // This will ignore case
select new
{
// Data from Server record
RootPath = SvrSet.vdi_rootpath, // This is the same for all Publication Profiles
SvrAddr = SvrSet.vdi_address,
// Data from N:N relationship record(s) vdi_publicationprofile_vdi_serverSet
SvrId = SvrToPubProfSet.vdi_serverid,
PubProfId = SvrToPubProfSet.vdi_publicationprofileid,
// Data from Publication Profile record(s)
PubProfName = PubProfSet.vdi_name,
RelativePath = PubProfSet.vdi_relativepath,
ReportRelativePath = PubProfSet.vdi_reportrelativepath,
ReportFilenameSeed = PubProfSet.vdi_reportfilenameseed,
SubSystemType = PubProfSet.vdi_subsystemtype,
ModifiedOn = PubProfSet.ModifiedOn
}).ToList());
...
var vdiConfigDataSet2 = s_compiledQuery(_SvcContext); //ERROR _SvcContext is not DataContext type
しかし、型オブジェクトが必要であり、DataContext
型オブジェクトからそれを取得する方法がわかりませんMicrosoft.Xrm.Client.CrmOrganizationServiceContext
。
DataContext
CRM 2011のLINQクエリをコンパイルする際に、またはおそらくより洗練されたソリューションを取得する方法を知っている人はいますか?