0

我有许多类似的 EF5 实体作为参考数据。例如:

咨询类型实体

public class ConsultationType
{
    public ConsultationType()
    {
        this.Appeals = new HashSet<Appeal>();
    }

    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Appeal> Appeals { get; set; }
}   

法分实体

public class LawBranch
{
    public LawBranch()
    {
        this.Appeals = new HashSet<Appeal>();
    }

    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Appeal> Appeals { get; set; }
}

DB 上下文中的 DbSet

public DbSet<LawBranch> LawBranches { get; set; }
public DbSet<ConsultationType> ConsultationTypes { get; set; }

如您所见,这些实体具有相似的属性IdTitle.

实际问题

我需要一个从数据库中获取数据并将其放入列表的函数。然后该函数插入预定义对象作为该列表的第一个元素。

我的预定义对象:

private class PredefinedReferenceItem
{
    public int Id { get; set; }
    public string Title { get; set; }

    public PredefinedReferenceItem()
    {
        this.Id = -1;
        this.Title = "some text";
    }
}   

我的错误解决方案:

首先,我创建IReference了描述参考实体的接口

public interface IReference
{
    int Id { get; set; }
    string Title { get; set; }
}

其次,我的引用实体实现了这个接口

public class ConsultationType : IReference { ... }
public class LawBranch: IReference { ... }

第三,我创建了函数

public IList<IReference> GetReferenceWithPredefinedItem<T>(DbSet<IReference> dbset)
{
    var data = from a in dbset
               orderby a.Title
               select a;

    var list = data.ToList();
    list.Insert(0, new PredefinedReferenceItem());

    return list;
}

但是该功能在我的视图模型中不起作用:

return GetReferenceWithPredefinedItem(dbContext.ConsultationTypes);

VS2012 中的错误信息:

The type arguments for method 'Mjc.Client.ViewModels.ViewModelBase.GetReferenceWithPredefinedItem<T>(System.Data.Entity.DbSet<Mjc.Foundation.IReference>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

请帮我找出错误或指定正确的方向。

4

2 回答 2

1

您新更改 GetReferenceWithPredefinedItem 以在泛型类型 T 上使用具有 IReference 约束的泛型,该方法应如下所示:

public IList<T> GetReferenceWithPredefinedItem<T>(DbSet<T> dbset) where T:IReference
{
    var data = from a in dbset
               orderby a.Title
               select a;

    var list = data.ToList();
    list.Insert(0, new PredefinedReferenceItem());

    return list;
}
于 2013-09-05T11:03:31.170 回答
0

alexandr-mihalciuc提供了正确的解决方案。我解决类型引用错误的补充: 最终解决方案:

public List<TEntity> GetReferenceWithPredefinedItem<TEntity>(DbSet<TEntity> dbset) where TEntity : class, new(), IReference
{
    var data = from a in dbset
               orderby a.Title
               select a;

    var list = data.ToList();
    list.Insert(0, new TEntity() { Id = -1, Title ="aefaef" });

    return list;
}
于 2013-09-05T12:02:49.580 回答