Предложение Linq Where с Generics не восстанавливает базовый тип Equals - PullRequest
3 голосов
/ 05 ноября 2010

У меня есть следующая простая функция:

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). "

Независимо от того, какой тип он представляет.Я пробовал "Байт", "Int16", "Int32", "Long" ... Сообщение то же самое.Я подумал, что определение общего ограничения как структуры будет достаточно для того, чтобы тип был преобразован в примитив.

Кстати: GetAll () возвращает IQueryable<TEntity>.

В любом случае ...Кто-нибудь знает обходной путь?Спасибо

Ответы [ 2 ]

4 голосов
/ 05 ноября 2010

Как насчет IEquatable?

where TId : IEquatable<TId>
0 голосов
/ 05 ноября 2010

Просто предположение. Что если вы попробовали это?

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