System.Linq.Expressions.Expression クラスを使用して動的に SQL "WHERE" 句を作成しています。「PhaseCode = X」句を追加するなど、単純な句に適しています。次のようにします。
var equalTarget = Expression.Constant(phaseCode, typeof(int?));
var phaseEquals = Expression.Equal(Expression.PropertyOrField(projParam, "PhaseCode"), equalTarget);
ただし、プロジェクトが特定のグループに割り当てられている場合にレコードを返す式を作成しようとしています。プロジェクトとグループには多対多の関係があります。式ツリーがなければ、次のようにします。
db.Projects.Where(p => .... && p.GroupsAssigned.Any(g => g.ID == groupId))
しかし、それを Expression クラスで表現する方法が見つからないようです。実際、私が理解できないことが2つあります。
- テーブル間のリレーションシップをトラバースする方法
- x.Any() の実行方法
どんな助けでも大歓迎です。