1

オブジェクトに入力するために熱心な読み込みを使用しています。子コレクションの子コレクションをフィルタリングすることは可能ですか? 次のコードは、フィルター処理された期間の子コレクションを提供します。しかし、TradeStatus == TradeStatus.Open? の期間の子もフィルタリングしたいと思います。

    public class Route
    {
       public Guid RouteId { get; set; }
       public string Name { get; set; }
       public virtual ICollection<Period> Periods { get; set; }
    }

    public class Period
    {
       public Guid PeriodId { get; set; }
       public virtual ICollection<Trade> Trades { get; set; }
       public bool IsActive { get; set; }
    }

    public class Trade
    {
       public Guid PeriodId { get; set; }
       public string TradeName { get; set; }
       public decimal TradePrice { get; set; }
       public TradeStatus TradeStatus { get; set; }
    }

    string routeName = "UK_USA"

    Route route = Context.Set<Route>().SingleOrDefault(r => r.Name.Equals(routeName));

    if (route != null)
    {
        Context.Entry(route).Collection(r => r.Tenors).Query()
                      .Where(t => t.IsActive)
                      .Include(t => t.Trades).Load();
    }

私は次のことを試しましたが、戻ってきます

インクルード パス式は、型で定義されたナビゲーション プロパティを参照する必要があります。参照ナビゲーション プロパティにはドット パスを使用し、コレクション ナビゲーション プロパティには Select 演算子を使用します。パラメータ名: パス

Context.Entry(route).Collection(r => r.Tenors).Query()
                          .Where(t => ValidTenorName.Contains(t.Name))
                          .Include(t => 
                              t.Trades.Where(tr=> tr.TradeStatus ==  TradeStatus.Open).Load();

この問題の解決策、またはおそらく結合を使用する別の方法はありますか?

ありがとう

4

0 に答える 0