c# - 如何传递要使用 LINQ 调用的函数委托(delegate)?

标签 c# linq generics .net-4.0 delegates

<分区>

我想我在这里问的是正确的问题......

我有 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 原则。预先感谢您的帮助。

最佳答案

使我的 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;
}

这导致了一个关于字段映射的新问题,但我会在一个新问题中提出这个问题。

关于c# - 如何传递要使用 LINQ 调用的函数委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747797/

相关文章:

c# - 什么会导致应用程序的 RAM 使用率线性增长?

c# - 将 C# 代码翻译成 AST?

c# - Azure WebJobs 3.0 上的 IQueueProcessorFactory?

vb.net - 如何使用Linq ToDictionary返回字典项中具有多个值的字典?

c# - 无法将 mysql 查询转换为 linq 语句

java - 避免在 Java 中未经检查的嵌套映射转换

c# - 如何解析具有多个小数点的字符串

c# - 如何使用 Linq2Sql C# 表达式使用复杂表达式进行连接

java - 数组和具体化类型

java - 如何从泛型方法调用非泛型方法