我正在使用 WCF 数据服务和实体框架 4 Code First 的 2011 年 3 月 CTP2,并且遇到了很多问题。我遇到的问题与不受支持的“内部查询”有关。
例如,在我的服务端,我有一个 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 => _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);
}