錯誤:無法創建類型爲「System.Object」的常量值。只有原始類型或枚舉類型在此上下文中受支持。Linq表達式不允許泛型屬性類型
確定這裏是交易, 我有一個通用的基礎機構,如下圖所示:
public abstract class Entity<Tkey> : IEntity<Tkey>
where Tkey:IComparable
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public abstract Tkey Id { get; set;}
}
我喜歡這個,因爲你知道,有些表的標識列類型的Guid,一些int和一些長。
所以,在我的通用存儲庫,我有一些像這樣的方法:
public class FRepository<TEntity,Tkey>:IDisposable where TEntity : Entity<Tkey>, new()
where Tkey:IComparable
{
public TEntity Find(Tkey id)
{
return this.GetAll().Where(e=> e.Id.CompareTo(id)==0).FirstOrDefault();
}
}
GETALL()方法返回IQueryable<TEntity>.
但是,當我使用LINQ查找特定的實體,它會拋出異常,因爲我寫這篇文章的開始。
注:我想找到的實體有編號爲int類型,所以它是一種最原始的...
注1:我能不能使用「==」操作員泛型類型TKey。我收到編譯錯誤。
注-2:我也試過這Where(e=>e.Id.GetHashCode()==id.GetHashCode())
。這會引發另一個錯誤(運行時)。
LINQ to Entities無法識別方法'Int32 GetHashCode()'方法,並且此方法無法轉換爲存儲表達式。
我已經通過向通用存儲庫添加一個Where方法來實現此目的,該方法允許使用謂詞參數。然後我將謂詞推到一個級別爲 'return GetAll()。Where(predicate).FirstOrDefault();' –
順便說一下,爲什麼'IComparable'? 'Idquatable '爲'Id'平等更好嗎? –
你用'e.Id == id'得到了什麼編譯錯誤? –