我尝试写经理课。但是我无法使用它:
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
}
}
答案 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);
}
这实际上是编译的。