如何在Entity?</model>中的Manager类中开发Repository <model>

时间:2010-08-22 18:32:35

标签: c# visual-studio linq entity-framework

我尝试写经理课。但是我无法使用它:

return erpObj.Get(predicate); 
我怎么能这样做?



namespace Erp.BLL.Manager
{

    public interface ILoad
    {
        List<TResult> Load<TKey,TResult>(List<TKey> list, Func<TKey, TResult> select);
    }

    public interface IRepository<TModel>
    {
        List<TModel> Get(Func<TModel, bool> predicate);
    }

    public interface IErpManager
    {
       List<TResult> Load<TKey,TResult>(ILoad erpObj, List<TKey> list, Func<TKey, TResult> select);
       List<TModel> Get(IRepository<TModel> erpObj, Func<TModel, bool> predicate);
    }

    public class ErpManager : IErpManager
    {

        #region IErpManager Members

        public List<TResult> Load<TKey, TResult>(ILoad erpObj, List<TKey> list, Func<TKey, TResult> select)
        {
            return erpObj.Load(list, select);
        }

        public List<TModel> Get(IRepository<TModel> erpObj, Func<TModel, bool> predicate)
        {
            return erpObj.Get(predicate);
        }

        #endregion
    }



}

3 个答案:

答案 0 :(得分:0)

我不知道IRepository的实现是什么,或者你用什么作为DAL,你甚至没有指出你有什么问题,但通常在LINQ中你使用这样的谓词:

Expression<Func<TModel, bool>> predicate

所以

public interface IRepository<TModel>
{
    List<TModel> Get(Expression<Func<TModel, bool>> predicate);
}

答案 1 :(得分:0)

您需要在Get上的ErpManager方法中指定通用参数

public List<TModel> Get<TModel>(IRepository<TModel> erpObj, Func<TModel, bool> predicate)
    {
        return erpObj.Get(predicate);
    }

这也必须反映在您的IErpManager界面上。

答案 2 :(得分:0)

您需要将模板类型添加到每个Get()方法:

    public interface IRepository<TModel>
    {
        List<TModel> Get<TModel>(Func<TModel, bool> predicate);
    }

    public interface IErpManager
    {
        List<TResult> Load<TKey, TResult>(ILoad erpObj, List<TKey> list, Func<TKey, TResult> select);
        List<TModel> Get<TModel>(IRepository<TModel> erpObj, Func<TModel, bool> predicate);
    }

ErpManager:

        public List<TModel> Get<TModel>(IRepository<TModel> erpObj, Func<TModel, bool> predicate)
        {
            return erpObj.Get(predicate);
        }

这实际上是编译的。