1

我正在尝试以更通用的方式编写此代码:是否有可能基于 T i 可以使用正确的 entityframework 实体?例如,如果我会使用:

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 回答