私は次のコードを持っている:この単純な等価比較はどのように実行できますか?
public abstract class RepositoryBase<T, TId> : IRepository<T, TId>
where T : class, IEntityWithTypedId<TId>
where TId : IEquatable<TId>, IComparable<TId>
{
public T FindById(TId id)
{
T entity;
using (this.Context) // This simply returns the NHibernate Session
{
var entities = from e in this.Context.Get()
// where e.Id.Equals(id)
where e.Id == id
select e;
entity = entities.FirstOrDefault();
}
return entity;
}
}
私はwhere e.Id == id
句を使用すると、私はエラーを取得:
error CS0019: Operator '==' cannot be applied to operands of type 'TId' and 'TId'
エラー私はTId
がIEquatable
とIComparable
を実装する必要があり、コンパイラを語ったにも関わらずに
私がwhere e.Id.Equals(id)
句を使用すると、コードがコンパイルされますが、NHibernateからNotSupported Exceptionが返されます。 FirstOrDefault
行
私はデザインで何かが欠けているに違いないことを知っていますが、解決策は数日間私を免れています。
問題を完全に回避してsession.Get(id)を使用してみませんか? –
Iain
エンティティ自体ではなく、キーを比較する必要があります... –
Get(id)を使用すると、この質問の最も単純な解決策になります。;) –