我写下面的代码MyCustomer.cs必须返回List,它是Customer实体的类型。 ©使用Func方法。我想这样做:
return erpEntityCtx.Customer.Select(select).ToList<TResult>();
但错误归还给我:
有一些无效的论点。
我可以用这个:
return erpEntityCtx.Customer.Select(c=>c.Name).ToList<TResult>();
但是我不能用DataContext做到这一点我该怎么做?
public class MyCustomer : Manager.ILoad
{
#region ILoad Members
public List<TResult> Load<TKey, TResult>(Func<TKey, TResult> select)
{
using (Erp.DAL.ErpEntities erpEntityCtx = new Erp.DAL.ErpEntities())
{
return erpEntityCtx.Customer.Select(select).ToList<TResult>();
}
}
#endregion
}
namespace Erp.BLL.Manager
{
public interface ILoad
{
List<TResult> Load<TKey,TResult>(List<TKey> list, Func<TKey, TResult> select);
List<TResult> Load<TKey, TResult>(Func<TKey, TResult> select);
}
public interface IErpManager
{
List<TResult> Load<TKey,TResult>(ILoad erpObj, List<TKey> list, Func<TKey, TResult> select);
List<TResult> Load<TKey, TResult>(ILoad erpObj, Func<TKey, TResult> select);
}
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);
}
#endregion
#region IErpManager Members
public List<TResult> Load<TKey, TResult>(ILoad erpObj, Func<TKey, TResult> select)
{
return erpObj.Load(select);
}
#endregion
}
}
答案 0 :(得分:2)
我认为您最初的一个问题是您的ILoad接口是非泛型的,但您指定的方法没有通用约束,例如。
List<TResult> Load<TKey, TResult>(Func<TKey, TResult> select);
首先,谓词必须评估为true,因此它应该是Func<TModel, bool> select
,其中TModel
是您的实体类型。
然后你试图这样做:
List<TResult> Load<TKey, TResult>(Func<TKey, TResult> select)
{
using (Erp.DAL.ErpEntities erpEntityCtx = new Erp.DAL.ErpEntities())
{
return erpEntityCtx.Customer.Select(select).ToList<TResult>();
}
}
如果没有为泛型方法指定任何约束(或者更好的是,您的泛型类),则无法使用Func来满足Func。
您需要更改为:
public interface IRepository<TModel>
{
List<TModel> Get(Func<TModel, bool> predicate);
}
实施为:
public class CustomerRepository : IRepository<Customer>
{
public List<Customer> Get(Func<Customer, bool> predicate)
{
using (var context = new ErpEntities())
{
return context.Customers.Where(predicate).ToList();
}
}
}
您应该阅读存储库模式。