我想我在这里问正确的问题......
我有4个存储过程,它们返回相同数据的不同子集。
我将此数据映射到服务器应用程序中的同一对象。
我已将代码设置如下:
internal static MyDataContext dc = new MyDataContext();
internal static List<MyObj> getData(DataType data)
{
List<MyObj> obj = null;
switch (data)
{
case DataType.Type1:
obj = mapObj(dc.getDataType1);
break;
case DateType.Type2:
obj = mapObj(dc.getDataType2);
break;
...
}
}
// This gives me an error that type T cannot be defined
// private static List<MyObj> mapObj(Func<T> getDataForObj)
// This gives me an error calling the function (Cannot find implementation of query pattern for source type T
private static List<MyObj> mapObj<T>(Func<T> getDataForObj)
{
List<MyObj> obj = new List<MyObj>();
var result = from a in getDataForObj()
select a;
foreach (var row in result)
{
... // map objs
}
return obj;
}
请参阅我对有关问题的方法声明的评论。我怎样才能正确完成这个?我的目标是不要多次复制/粘贴相同的代码...试图遵循DRY原则。在此先感谢您的帮助。
答案 0 :(得分:1)
使我的mapObj函数如下(根据评论中的@Jon Skeet建议)允许它编译并运行:
private static List<MyObj> mapObj<T>(Func<IEnumerable<T>> getDataForObj)
{
List<MyObj> obj = new List<MyObj>();
var result = from a in getDataForObj()
select a;
foreach (var row in result)
{
... // map objs
}
return obj;
}
这导致了关于字段映射的新问题,但我会在一个新问题中提出这个问题。