2
public interface IEntite
{
   int Id { get; set; }
   string NomEntite { get; }
}

public class SpecIdEntite<TEntite> : CompositeSpecification<TEntite> where TEntite : IEntite
{
   private int _id;
   public SpecIdEntite(int id)
   {
      _id = id;
   }

  public override Expression<Func<TEntite, bool>> IsSatisfiedBy()
  {
     return candidate => (candidate != null && candidate.Id == _id);
  }
}

当我尝试这个规范时,我得到了这个错误:“无法将类型'类型名称'转换为类型'X'。LINQ to Entities 仅支持转换实体数据模型原始类型。”

有人知道如何实现这个概念吗?

我所有的实体都有一个 Id 属性,我想使用通用规范

4

1 回答 1

1

我不知道确切原因,但唯一缺少的是class对类型的约束。这应该有效:

public interface IEntite
{
   int Id { get; set; }
   string NomEntite { get; }
}

public class SpecIdEntite<TEntite> : CompositeSpecification<TEntite> where TEntite : class, IEntite
{
   private int _id;
   public SpecIdEntite(int id)
   {
      _id = id;
   }

  public override Expression<Func<TEntite, bool>> IsSatisfiedBy()
  {
     return candidate => (candidate != null && candidate.Id == _id);
  }
}

class约束指定类型类型必须是引用类型,如此处所述

于 2013-02-28T20:28:58.760 回答