0

EF 5.0 と Code First を使用しています。私の汎用リポジトリには、論理的な方法でレコードを除外する方法があります。このメソッドは実際に更新を実行し、エンティティ フィールドのステータスを false に設定します。

クエリをインターセプトし、status == true の場合のみフィルタリングしたいと思います。

それを行う簡単な方法はありますか?元:

new GenericRepository<Entity>().ToList(); 
// and internally it will filter where status == true.
4

3 に答える 3

2

ジェネリック メソッドを作成する

public IQueryable<T> All<T>(Expression<Func<T, bool>> predicate) {

  return context.Set<T>().Where(predicate);

}

プロパティにもっとリンクしたい場合statusは、リフレクションを使用して自分でラムダを構築する必要があります (linq でインターフェイスを使用してクエリを実行することはできないため)。

そのようなもの(テストされていません)、ジェネリックAllメソッドを呼び出します。

   public IQueryable<T>AllButDeleted<T>() {
     var property = typeof(T).GetProperty("status");
     //check if T has a "status" property
     if (property == null && || property.PropertyType != typeof(bool)) throw new ArgumentException("This entity doesn't have an status property, or it's not a boolean");
     //build the expression
     //m =>
      var parameter = new ParameterExpression(typeof(T), "m");
     // m.status
     Expression body = Expression.Property(parameter, property);
     //m.status == true (which is just m.status)
     body = Expression.IsTrue(body);
     //m => m.status
     var lambdaPredicate = Expression.Lambda<Func<T, bool>>(body, new[]{parameter});
     return All(lambdaPredicate);
   } 
于 2013-07-12T11:49:30.647 に答える
0

Where を使用してフィルタリングできます。

.Where(e => e.Status == true).ToList();
于 2013-07-12T11:37:39.190 に答える