考虑这种情况:
我有一个参考数据,我写服务将其返回给我的客户。在我的程序中,我使用不同类型的数据。
我希望从客户端以动态方式从数据库中获得我想要的内容。
我想使用这样的代码:
public List<TResult> FindAll<T, TResult>(Func<T, bool> exp, Func<T, TResult> selector, int PageSize) where TResult : class
{
}
问题是我无法将我的服务接口声明为通用,我无法以这种方式使用该代码:
public List<TResult> FindAll<Order, TResult>(Func<Order, bool> exp, Func<Order, TResult> selector, int PageSize) where TResult : class
{
using (DataClasses1DataContext dc = new DataClasses1DataContext())
{
return dc.Orders.Where(exp).Select<Order, TResult>(selector).ToList<TResult>();
}
}
因为:
在函数中的顺序充当参数而不是订单类。
我的TResult未在服务中声明
我怎么能这样做?非常感谢。
答案 0 :(得分:1)
你不能使你的方法通用,你不能将委托作为参数传递,你可能也不能将表达式树作为参数传递,因为我认为它默认是不可序列化的。您应该使用一些已经为您执行此操作的API - 请检查WCF Data Services或Expression Tree Serialization。