1

私はこのコードをより一般的な方法で記述しようとしています: T i に基づいて適切なエンティティフレームワークエンティティを使用できる可能性はありますか? たとえば、次を使用する場合:

public IQueryable<T> GetCount(string filterExpression)
{
   //return db.Persons.Where("it." + filterExpression);
   return db. ? .Where("it." + filterExpression); // depending on type T
}

アップデート

だから今私はこれをしました:

  public int GetCount<T>(string filter)
        where T : class
        {
            NortwindEntities db = new NortwindEntities();
            return db.CreateObjectSet<T>().Where(filter).Count();
        }

エラー:

Error   2   The constraints for type parameter 'T' of method 'MyBase<T>.GetCount<T>(string)' must match the constraints for type parameter 'T' of interface method 'MyBase<T>.GetCount<T>(string)'. Consider using an explicit interface implementation instead
4

1 に答える 1

1

のクエリ可能が必要ですTか? (メソッドの名前は ですGetCount。)

これを行うと、 から を取得できIQueryable<T>ますDbContext

public IQueryable<T> GetCount<T>(Func<T, bool> predicate)
    where T : class
{
    MyContext db = new MyContext();
    return db.Set<T>().Where(predicate).AsQueryable();
}

IQueryable<Person> result = GetCount<Person>(x => x.Id == 1);

Where名前をメソッド名として使用することをお勧めします。

public IQueryable<T> Where<T>(Func<T, bool> predicate)
    where T : class
{
    MyContext db = new MyContext();
    return db.Set<T>().Where(predicate).AsQueryable();
}

IQueryable<Person> result = Where<Person>(x => x.Id == 1);

アップデート

where T : class次の例外が発生した場合は、メソッドを装飾します。

型 'T' は、ジェネリック型またはメソッドでパラメーター 'TEntity' として使用するには、参照型である必要がありますか?

更新 2

あなたは本当にカウントだけが欲しいようです。

public int GetCount<T>(Func<T, bool> predicate)
    where T : class
{
    MyContext db = new MyContext();
    return db.Set<T>().Where(predicate).Count();
}

int count = GetCount<Person>(x => x.Id == 1);
于 2012-08-07T07:30:38.490 に答える