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」にキャストできません。LINQtoエンティティはエンティティデータモデルプリミティブタイプのキャストのみをサポートしています。」というエラーが発生しました。

この概念を実装する方法を知っている人はいますか?

すべてのエンティティに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で説明されているように、制約は型 type が参照型でなければならないことを指定します

于 2013-02-28T20:28:58.760 に答える