具有泛型的Linq Where子句不识别等于基类型

时间:2010-11-04 21:14:20

标签: linq-to-sql entity-framework c#-4.0

我有以下简单的功能:

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>

无论如何......有人知道解决方法吗? 感谢

2 个答案:

答案 0 :(得分:4)

IEquatable怎么样?

where TId : IEquatable<TId>

答案 1 :(得分:-1)

只是一个猜测。如果你试过这个怎么办?

e.Id.GetHashCode() == id.GetHashCode()