1

一連のナビゲーションチェーンで選択される要素を制限しようとしています。大まかな順序は次のとおりです。[注文]->[設定]->[設定カード]->[アイテム]->[注文アイテム]

ノート:

  • 注文には複数の設定があります。
  • プリファレンスには1枚のプリファレンスカードがあります。
  • プリファレンスカードはアイテムで構成されています。
  • OrderItemには、注文に固有のそのアイテムに関する詳細が含まれています。

OrderItemの選択を、注文にリンクされているものだけに制限するにはどうすればよいですか?Orderに対応していなくても、すべてのInclude("Preference.PreferenceCard.Item.OrderItem")OrderItemを取得します。

句を試しましたWhere()が、何も実行されないようです。

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

ナビゲーションプロパティを介してチェーンされている場合でも、OrderIdでOrderItemsを適切にフィルタリングするにはどうすればよいですか?

4

1 に答える 1

0

これらのタイプの問題との混乱の主な原因は、EntityFrameworkのエンティティが通常のクラスとは異なることを理解していることだと思います。データ構造またはそのナビゲーションプロパティ(追加、変更、削除)を操作せず、匿名タイプまたはPOCO(Plain Old CLR Objects)を返すよりも、データのカスタムビューが必要な場合)。独自のクラスを宣言し、それに応じてプロパティを割り当てることができます。

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
              ...
             };
于 2012-05-09T16:42:38.457 に答える