C# 使用RIA服务批量查询DomainContext

C# 使用RIA服务批量查询DomainContext,c#,wcf,silverlight,silverlight-4.0,wcf-ria-services,C#,Wcf,Silverlight,Silverlight 4.0,Wcf Ria Services,我有一个简单的Silverlight网页,它使用RIA服务显示远程数据库中的dtaa。我有一个DomainContext,我通过它对数据库进行查询 context.Load(context.GetSitesQuery()).Completed += new EventHandler(Query_Completed); 请注意,我正在等待查询完成。这里的问题是,我需要进行至少20个不同的查询,每个查询涉及不同的实体对象。在加载所有数据之前,应用程序实际上也做不了什么。所以,我只想知道所有查询何时

我有一个简单的Silverlight网页,它使用RIA服务显示远程数据库中的dtaa。我有一个
DomainContext
,我通过它对数据库进行查询

context.Load(context.GetSitesQuery()).Completed += new EventHandler(Query_Completed);
请注意,我正在等待查询完成。这里的问题是,我需要进行至少20个不同的查询,每个查询涉及不同的实体对象。在加载所有数据之前,应用程序实际上也做不了什么。所以,我只想知道所有查询何时完成。有没有一种简单的方法来创建一批查询


我自己尝试过,但由于每个查询都涉及不同的实体,因此遇到了一个问题。我创建了一个
EntityQuery
列表,我想我可以迭代它并执行所有查询,但是
Load
方法要么抱怨参数错误,要么在运行时失败。

通过跟踪挂起的加载操作的数量,我们已经完成了您想要做的事情。当它达到0时,您就有效地完成了

using System.ServiceModel.DomainServices.Client;

...

private int _loadCounter;
private TheDomainContext _domainContext;

private void Load<TEntity>(EntityQuery<TEntity> query,
                           Action<LoadOperation<TEntity>> callback)
                       where TEntity : Entity
{
    BeginLoading();
    Action<LoadOperation<TEntity>> internalCallback = 
            loadOp => {
                          callback(loadOP);
                          EndLoading();
                      };
    _domainContext.Load(query, internalCallback , null);
}

private void BeginLoading()
{
    _loadCounter++;
    // You could add logic to indicate the app is busy
}

private void EndLoading()
{
    _loadCounter--;
    if (_loadCounter == 0)
    {
        OnLoadComplete();
    }
}

private void OnLoadComplete()
{
    // TODO Everything is loaded
}

private void BeginLoadingTheQueries()
{
    // Increment once here to prevent the OnLoadComplete from occurring
    // before all queries have started
    BeginLoading();
    Load(_domainContext.GetSitesQuery(), Query_Completed);
    Load(_domainContext.GetOtherQuery(), OtherQuery_Completed);
    EndLoading();
}
使用System.ServiceModel.DomainServices.Client;
...
专用int_装载计数器;
私有领域文本_domainContext;
专用无效加载(EntityQuery查询,
操作(回调)
其中tenty:实体
{
开始加载();
操作内部回调=
loadOp=>{
回调(loadOP);
EndLoading();
};
_Load(查询,内部回调,空);
}
私有void开始加载()
{
_loadCounter++;
//您可以添加逻辑来指示应用程序正忙
}
私有void结束加载()
{
_装载计数器--;
如果(_loadCounter==0)
{
OnLoadComplete();
}
}
私有void OnLoadComplete()
{
//TODO所有内容都已加载
}
private void开始加载查询()
{
//在此处增加一次,以防止发生OnLoadComplete
//在所有查询开始之前
开始加载();
加载(_domainContext.GetSitesQuery(),查询已完成);
加载(_domainContext.GetOtherQuery(),OtherQuery_已完成);
EndLoading();
}

如何获取对
tenty
的引用?(感谢添加C#标记)我使用语句添加了
where tenty:Entity
和必需的
。谢谢。这基本上就是我已经拥有的。我希望有更好的方法,但我想这没问题。