2012-05-09 3 views
1

Я пытаюсь ограничить элементы, выбранные в серии навигационных цепей. Вот примерно последовательность: Order -> Preference (s) -> PreferenceCard -> Item (s) -> OrderItemEntity Framework 3 - Элементы фильтра в цепочке Навигационные свойства

Примечания:

  • Заказ может иметь несколько предпочтений.
  • Предпочтение есть 1 карточка предпочтения.
  • Карта предпочтений состоит из предметов.
  • OrderItem содержит информацию об этом товаре, относящемся к заказу.

Как ограничить выбор OrderItems только теми, которые связаны с моим заказом? Мой Include("Preference.PreferenceCard.Item.OrderItem") просто захватывает все OrderItems, даже если они не соответствуют заказу.

Я попробовал положение Where(), но это, кажется, не делать ничего:

.Where(
    o => o.Preference.Any(
     p => p.PreferenceCard.Items.Any(
      item => item.OrderItem.Any(
       orderItem => orderItem.OrderId == o.OrderId)))) 

Как правильно фильтровать OrderItems по OrderId даже Каскадный навигационных свойства?

ответ

0

Я считаю, что основным источником путаницы с этими типами проблем является понимание того, что сущность из EntityFramework отличается от обычного класса. Если вы не хотите манипулировать своей структурой данных или ее навигационными свойствами (добавлять, изменять, удалять), и вы просто хотите иметь пользовательский вид своих данных, чем вы должны возвращать анонимный тип или POCO (обычные объекты CLR). Вы можете объявить свой собственный класс и соответствующим образом присвоить свойства.

public class OrderView 
{ 
    public int Id { get; set; } 
    public IEnumerable<OrderItem> OrderItems { get; set; } 
    ... 
} 

var query = from o in context.Orders 
      select new OrderView 
      { 
       Id = o.Id, 
       OrderItems = //custom filtering 
       ... 
      }; 
+0

Эти данные будут обрабатываться, и я не хочу фильтровать объект в памяти по соображениям производительности. Невозможно ли фильтровать захваченные элементы? – strongriley

+0

@strongriley - Я не предлагаю вам фильтровать элементы в памяти. С EntityFramework фильтрация вашего свойства навигации Entities аналогична удалению этих элементов. Как вы собираетесь манипулировать данными, если у Entity есть только часть его навигационного свойства? – Aducci

+0

Спасибо за руководство - я закончил тем, что захватил OrderItems прямо после заказа, а затем повторил, присоединив их обратно к PreferenceCard/Items. – strongriley

Смежные вопросы