Службы данных WCF не поддерживают много вещей

Я использую CTP2 от WCF Data Services и Entity Framework 4 Code в марте 2011 года, и у меня много проблем с ним. Проблемы, которые у меня возникают, связаны с тем, что "внутренние запросы" не поддерживаются.

Например, на стороне моих услуг у меня есть объект Auction, к нему можно прикрепить 0 или более ставок. Теперь на стороне клиента я хотел выполнить этот запрос, чтобы найти текущую самую высокую ставку (являющуюся объектом аукциона).

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 ответ

Решение

К сожалению, не поддерживается из-за характера протокола. Вот список вещей, которые вы не можете сделать.

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

Я рекомендую создать сервисный метод, чтобы делать то, что вы хотите.

Другие вопросы по тегам