Я пытаюсь фильтровать вниз результаты, возвращаемые EF в только те, которые касаются - в приведенном ниже примере для тех, кто в течение года (formattedYear) и OrderType (filtOrder)Фильтрация график структуры сущностей объектов
I есть простой набор объектов
ЛЮДИ 1-М ЗАКАЗЫ 1-M OrderLines
с этими отношениями, которые уже определены в Model.edmx
в SQL я бы сделать что-то вроде ...
выберите * от людей внутренних присоединиться к ЗАКАЗЫ на ORDERS.PEOPLE_RECNO = PEOPLE.RECORD_NUMBER внутреннее соединение OrderLine на ORDERLINE.ORDER_RECNO = ORDERS.RECORD_NUMBER где [email protected] и [email protected]
Я попробовал несколько подходов ...
var y = _entities.PEOPLE.Include("ORDERS").Where("it.ORDERS.ORDER_KEY=" + filtOrder.ToString()).Include("ORDERLINEs").Where("it.ORDERS.ORDERLINEs.SERVICE_YEAR='" + formattedYear + "'");
var x = (from hp in _entities.PEOPLE
join ho in _entities.ORDERS on hp.RECORD_NUMBER equals ho.PEOPLE_RECNO
join ol in _entities.ORDERLINEs on ho.RECORD_NUMBER equals ol.ORDERS_RECNO
where (formattedYear == ol.SERVICE_YEAR) && (ho.ORDER_KEY==filtOrder)
select hp
);
у терпит неудачу с ORDER_KEY не является членом transient.collection ... и х возвращает правильные люди, но они все свои заказы прилагается - не только те, кого я буду.
Наверное, я пропустил что-то простое?
Это кажется приятным, но если вам нужно использовать результат в другом методе (представьте, что это сделано в DAL), использование анонимных объектов может быть проблемой ... Невозможно ли вернуть объект People? Потеряли бы фильтр, примененный к Заказу? –
Крейг - да, я понимаю, но хочу избежать анонимных объектов именно по той причине, о которых упоминает Жюльен. Я просто хочу, чтобы мой репозиторий мог возвращать людей с нужными данными и передавать их строго типизированным представлениям, которые в других обстоятельствах могут работать со всем набором данных. – Andiih
Вы можете вернуть POCOs вместо анонимных типов, если хотите (просто вставьте имя типа между 'new' и' {'). Однако вы не можете возвращать типы сущностей, поскольку EF не разрешает частично построенные объекты. –