Отношение EF4, Npgsql, M: M, «Метод или операция не реализованы».: / - PullRequest
1 голос
/ 26 июля 2010

У меня проблема с отношением «многие ко многим» в EF4 и провайдере npgsql.

У меня есть 3 таблицы: Order, OrderStatus и OrderStatusDict (словарь).OrderStatus - это своего рода changeLog - каждое изменение статуса заказа добавляется в таблицу OrderStatus с ее фактической датой и новым статусом. Мне нужно получить все заказы, которые имеют статус.OrderStatusDict.OrderStatusName == "Ожидание" , поэтому я делаю это так:

var lst = (from o in db.Order
           where o.OrderStatus
                       .OrderByDescending(s => s.Date)
                       .FirstOrDefault()
                       .OrdereStatusDict.OrderStatusName == "Pending"          
           select o).ToList();

И я получаю исключение:

Произошла ошибка при подготовке определения команды.Смотрите внутреннее исключение для деталей.Данные: {System.Collections.ListDictionaryInternal} Внутреннее исключение: {"Метод или операция не реализованы."}} 1011 *

И похоже, что OrderByDescending убивает мой запрос, потому что, если я прокомментирую

.OrderByDescending(s => s.Date)

Все отлично работает, но я получаю самый старый OrderStatus из db: /

Можете ли вы мне помочь?Это причина провайдера или проблема EF?У вас есть какие-нибудь идеи, которые я мог бы получить другим способом?

1 Ответ

0 голосов
/ 26 июля 2010

Я бы так не написал запрос.

Попытка:

var lst = (from o in db.Order
           let maxDate = o.OrderStatus.Max(s => s.Date)
           where o.OrderStatus.Any(s => s.Date == MaxDate 
                                        && s.OrdereStatusDict.OrderStatusName.Equals("Pending", StringComparison.OrdinalIgnoreCase))
           select o).ToList();

Я предполагаю, что сравнение статуса должно быть без учета регистра.

Обратите внимание, что мой запрос ведет себя не так, как ваш, если максимальная дата не уникальна. Я предполагаю, что это либо уникально, либо что мой путь верен.

...