.ThenIncludeを使用して子コレクションの子コレクションを処理できるEntity Framework Core 2.0用のリポジトリメソッドを作成しようとしていますが、表現。ここでは、.Includeのための作業メソッドがあります。これは、エンティティの子プロパティ(lambdaのリストを提供します)を返します。今ここにEFコア2の.ThenIncludeのリポジトリメソッドの記述方法
public T GetSingle(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query.Where(predicate).FirstOrDefault();
}
は、2つの式のタプルを取り、.INCLUDE(A => a.someChild).ThenInclude(B => b.aChildOfSomeChild)チェーンにそれらを供給するメソッドを書く時、私の試みです。これは完璧な解決策ではありません。なぜなら、子どもの1人の子供しか処理しないからです。
public T GetSingle(Expression<Func<T, bool>> predicate, params Tuple<Expression<Func<T, object>>, Expression<Func<T, object>>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty.Item1).ThenInclude(includeProperty.Item2);
}
return query.Where(predicate).FirstOrDefault();
}
Intellisenseは、「型を推論することはできません。型を明示的に指定してください」というエラーを返します。 Item2の表現は、Item1に何らかの形で関連する必要があるため、それが持っている子関係について知る必要があるため、それが気になります。
このような方法を書くためのアイデアやより良い技術はありますか?
それは事実上、所望のEF6を使用してリポジトリ方法に含ま特定の標準であったので、これを複数回求められています。 EFCチームのメンバーの話を聞いて興味深いのは、パターンを「インクルード」/「ThenInclude」に変更する決定の背後にある理由で、明らかにこのように表現できないことです。さらに重要なのは、EFCの置き換えです。 –