Как я могу разработать lRepository <TModel>в классе Manager в Enttiy? - PullRequest
1 голос
/ 22 августа 2010

Я пытаюсь написать менеджер класса.Но я не могу использовать это:

return erpObj.Get(predicate); 
Как я могу это сделать?


namespace Erp.BLL.Manager
{

    public interface ILoad
    {
        List&#60;TResult&#62; Load&#60;TKey,TResult&#62;(List&#60;TKey&#62; list, Func&#60;TKey, TResult&#62; select);
    }

    public interface IRepository&#60;TModel&#62;
    {
        List&#60;TModel&#62; Get(Func&#60;TModel, bool&#62; predicate);
    }

    public interface IErpManager
    {
       List&#60;TResult&#62; Load&#60;TKey,TResult&#62;(ILoad erpObj, List&#60;TKey&#62; list, Func&#60;TKey, TResult&#62; select);
       List&#60;TModel&#62; Get(IRepository&#60;TModel&#62; erpObj, Func&#60;TModel, bool&#62; predicate);
    }

    public class ErpManager : IErpManager
    {

        #region IErpManager Members

        public List&#60;TResult&#62; Load&#60;TKey, TResult&#62;(ILoad erpObj, List&#60;TKey&#62; list, Func&#60;TKey, TResult&#62; select)
        {
            return erpObj.Load(list, select);
        }

        public List&#60;TModel&#62; Get(IRepository&#60;TModel&#62; erpObj, Func&#60;TModel, bool&#62; predicate)
        {
            return erpObj.Get(predicate);
        }

        #endregion
    }



}

Ответы [ 3 ]

0 голосов
/ 23 августа 2010

С первого взгляда вам нужно указать общий аргумент для метода Get в вашем ErpManager

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

, что также должно быть отражено в вашем интерфейсе IErpManager.

0 голосов
/ 23 августа 2010

Вам необходимо добавить тип шаблона для каждого метода 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);
        }

Это на самом деле скомпилируется.

0 голосов
/ 22 августа 2010

Я не знаю, что является реализацией IRepository или что вы используете в качестве DAL, и вы даже не указали, какая у вас проблема, но обычно в LINQ вы используете такие предикаты:

Expression<Func<TModel, bool>> predicate

так

public interface IRepository<TModel>
{
    List<TModel> Get(Expression<Func<TModel, bool>> predicate);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...