我有以下简单的功能:
public class BaseEntityRepository<TEntity, TId> : IBaseEntityRepository<TEntity, TId>
where TEntity : class, TBaseEntity, IIdentifiedEntity<TId>
where TId : struct {
//...
public virtual TEntity GetById(TId id) {
return (from e in GetAll() where e.Id.Equals(id) select e).SingleOrDefault();
}
//...
}
由于TId是通用的,我收到以下消息:
“无法创建'System.Object'类型的常量值。在此上下文中仅支持基本类型(例如Int32,String和Guid')。”
无论它代表什么类型。我试过“Byte”,“Int16”,“Int32”,“Long”...消息是一样的。 我认为将通用约束定义为结构将被重新定义为基元。
BTW ... GetAll()返回IQueryable<TEntity>
。
无论如何......有人知道解决方法吗? 感谢
答案 0 :(得分:4)
IEquatable怎么样?
where TId : IEquatable<TId>
答案 1 :(得分:-1)
只是一个猜测。如果你试过这个怎么办?
e.Id.GetHashCode() == id.GetHashCode()