使用筛选器进行聚合的WCF数据服务方法

使用筛选器进行聚合的WCF数据服务方法,wcf,wcf-data-services,aggregation,Wcf,Wcf Data Services,Aggregation,我需要对我的wcf数据服务的一些数据进行聚合,以便执行类似于月报的操作。无法通过odata协议进行Afaik聚合。我想我必须实现我自己的WebGet方法,或者有其他的可能性吗?。我的第一个机会是: [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, UseSynchronizationContext = false)] class MyDataService : DataService<MyContext> {

我需要对我的wcf数据服务的一些数据进行聚合,以便执行类似于月报的操作。无法通过odata协议进行Afaik聚合。我想我必须实现我自己的WebGet方法,或者有其他的可能性吗?。我的第一个机会是:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, UseSynchronizationContext = false)]
class MyDataService : DataService<MyContext>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;

        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
        config.UseVerboseErrors = true;
    }

    [WebGet]
    public int SumColumnOfMyTable()
    {
        // return here the aggregated data with the usage of the odata $filter param
    }

}

我想使用odata协议的$filter参数来过滤聚集。这可能吗?这是使用WCF数据服务进行聚合的正确方法吗?我很无知,找不到任何有用的信息。提前感谢…

在重新思考之后,我得出结论,最好、最简单的方法可能是数据库视图。这意味着我可以创建一个映射到视图的额外实体,然后可以通过数据服务访问该实体。但是这给了我一个问题,因为视图没有主键

还有其他想法吗

更新:我通过为视图Firebird中的每一行生成一个ID解决了主键问题:

coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#') as integer), 0) + 1 as ID
然而,对于wcf数据服务的这个问题似乎没有干净的解决方案