通用存储库中的 OrderBy 和 OrderByDescending DateTime?
OrderBy & OrderByDescending DateTime In Generic Repository?
在我的解决方案中,创建通用存储库
public abstract class GenericRepository<C,T> : Repo.IGenericRepository<T>
where T : class
where C : DbContext, new(){
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll(
Expression<Func<T,object>> predicate,
Sorted _sort = Sorted.ASC,
int _max = 0,
int _skip = 0
) {
IQueryable<T> query = _sort == Sorted.ASC ? //Sorted is enum
_entities.Set<T>().OrderBy(predicate).Skip(_skip).Take(_max) :
_entities.Set<T>().OrderByDescending(predicate).Skip(_skip).Take(_max);
return query;
}
}
并致电
var db = new JobRepository();
db.GetAll(e=>e.jcudate, sort, a, b).ToList();
错误:
Unable to cast the type 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
但是,如果使用
WSCEntities dbs = new WSCEntities();
dbs.jobservs.OrderBy(e=>e.jcudate).Skip(b).Take(a).ToList();
完全没有问题..,请建议我应该如何解决这个问题?
尝试在 Expression<Func>
上使用 Func
委托
public virtual IQueryable<T> GetAll(
Func<T,object> predicate,
Sorted _sort = Sorted.ASC,
int _max = 0,
int _skip = 0
) {
IQueryable<T> query = _sort == Sorted.ASC ? //Sorted is enum
_entities.Set<T>().OrderBy(predicate).Skip(_skip).Take(_max) :
_entities.Set<T>().OrderByDescending(predicate).Skip(_skip).Take(_max);
return query;
}
要详细了解 OrderBy
方法的 msdn documentation。
在我的解决方案中,创建通用存储库
public abstract class GenericRepository<C,T> : Repo.IGenericRepository<T>
where T : class
where C : DbContext, new(){
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll(
Expression<Func<T,object>> predicate,
Sorted _sort = Sorted.ASC,
int _max = 0,
int _skip = 0
) {
IQueryable<T> query = _sort == Sorted.ASC ? //Sorted is enum
_entities.Set<T>().OrderBy(predicate).Skip(_skip).Take(_max) :
_entities.Set<T>().OrderByDescending(predicate).Skip(_skip).Take(_max);
return query;
}
}
并致电
var db = new JobRepository();
db.GetAll(e=>e.jcudate, sort, a, b).ToList();
错误:
Unable to cast the type 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
但是,如果使用
WSCEntities dbs = new WSCEntities();
dbs.jobservs.OrderBy(e=>e.jcudate).Skip(b).Take(a).ToList();
完全没有问题..,请建议我应该如何解决这个问题?
尝试在 Expression<Func>
Func
委托
public virtual IQueryable<T> GetAll(
Func<T,object> predicate,
Sorted _sort = Sorted.ASC,
int _max = 0,
int _skip = 0
) {
IQueryable<T> query = _sort == Sorted.ASC ? //Sorted is enum
_entities.Set<T>().OrderBy(predicate).Skip(_skip).Take(_max) :
_entities.Set<T>().OrderByDescending(predicate).Skip(_skip).Take(_max);
return query;
}
要详细了解 OrderBy
方法的 msdn documentation。