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);
}
}
当我尝试此规范时,我收到此错误:&#34;无法转换类型&#39;类型名称&#39;输入&#39; X&#39;。 LINQ to Entities仅支持转换实体数据模型基元类型。&#34;
任何人都知道如何实现这个概念?
我的所有实体都有Id属性,我想使用通用规范
答案 0 :(得分: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
约束指定类型类型必须是引用类型,如here所述。