WCF数据服务不支持很多东西

时间:2012-05-31 16:33:49

标签: c# wcf entity-framework-4 wcf-data-services wcf-data-services-client

我正在使用2011年3月的WCF数据服务CTP2和实体框架4 Code First,并且遇到了很多问题。我遇到的问题与“内部查询”无关。

例如,在我的服务方面,我有一个Auction对象,Auction对象可以附加0个或更多个出价。现在,在我的客户端,我想执行此查询以查找当前的最高出价( a 是拍卖对象)。

a.Bids.OrderByDescending(b => b.Amount).First().Amount

如果没有出价,请忽略这一事实。运行此查询时出现此错误

The expression [10007].Bids.OrderByDescending(b => b.Amount).First().Amount is not supported.

所以我想我会把这个逻辑放在服务方面。从客户端我称之为这种方法(再次 a 是拍卖)

a => _auctionContext.GetHighestBid(a.Id).First().Amount

我再次收到错误

The expression value(UI.AuctionService.AuctionContext).GetHighestBid([10007].Id).First().Amount is not supported. 

我的问题是,为什么会发生这种情况?是因为我使用的WCF数据服务版本?这些问题是否已在最新版本中得到解决?

由于

萨钦

修改

_auctionOrderings = new Dictionary<string, Func<IQueryable<Auction>, bool, IOrderedQueryable<Auction>>>
            {
                {"Ends", Utils.CreateOrderingFunc<Auction, DateTime?>(a => a.Ends)},
                {"CurrentPrice", Utils.CreateOrderingFunc<Auction, decimal>(a.Bids.OrderByDescending(b => b.Amount).First().Amount)},
                {"StartingPrice", Utils.CreateOrderingFunc<Auction, decimal>(a => a.StartingPrice)}
            };

public static Func<IQueryable<T>, bool, IOrderedQueryable<T>> CreateOrderingFunc<T, TKey>(Expression<Func<T, TKey>> keySelector)
        {
            return
                (source, ascending) =>
                ascending
                    ? source.OrderBy(keySelector)
                    : source.OrderByDescending(keySelector);
        }

1 个答案:

答案 0 :(得分:1)

遗憾的是,由于协议的性质,不支持。这是你不能做的事情清单。

http://msdn.microsoft.com/en-us/library/ee622463.aspx

我的建议是创建一个服务方法来做你想做的事。