C# 使用泛型为泛型类型生成IEnumerable

C# 使用泛型为泛型类型生成IEnumerable,c#,generics,ienumerable,C#,Generics,Ienumerable,我有一个类X,Y和Z,需要一个方法来返回X,Y或Z的IEnumerable,比如: public IEnumerable<T> BuildList<T>(String sql) { return Query<T>(sql); } 其中Query是执行SQL查询并将结果映射到T的IEnumerable的自定义方法 我想像这样使用它: var x_items = BuildList<X>("select * from table_x"); v

我有一个类X,Y和Z,需要一个方法来返回X,Y或Z的IEnumerable,比如:

public IEnumerable<T> BuildList<T>(String sql)
{
    return Query<T>(sql);
}
其中Query是执行SQL查询并将结果映射到T的IEnumerable的自定义方法

我想像这样使用它:

var x_items = BuildList<X>("select * from table_x");
var y_items = BuildList<Y>("select * from table_y");
var z_items = BuildList<Z>("select * from table_z");

问题是查询方法还是我只是做了泛型错误

T的类型应该存在于dbcontext中

T的类型应该存在于dbcontext中

鉴于您在注释中给出的编译器错误,听起来您只需要对T进行类型约束:


考虑到您在注释中给出的编译器错误,听起来您只需要在T上设置一个类型约束:


好吧,看起来不错-你犯了什么错误?这比仅仅调用查询有什么好处?你没有提供足够的信息让我们帮助你…信息很薄,我知道-对不起。我不能直接调用查询,因为它位于数据访问层。我收到的错误:“T”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“Data.SQL.SqlDataAccessLayerBase.Querystring,params Data.SQL.SqlParameter[]中的参数“TStorage”'和错误2类型'T'必须是引用类型,才能将其用作泛型类型或方法'Data.SQL.SqlDataAccessLayerBase.Querystring,params Data.SQL.SqlParameter[]中的参数'TStorage'。这有用吗?看起来没问题-你犯了什么错误?这比仅仅调用查询有什么好处?你没有提供足够的信息让我们帮助你…信息很薄,我知道-对不起。我不能直接调用查询,因为它位于数据访问层。我收到的错误:“T”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“Data.SQL.SqlDataAccessLayerBase.Querystring,params Data.SQL.SqlParameter[]中的参数“TStorage”'和错误2类型'T'必须是引用类型,才能将其用作泛型类型或方法'Data.SQL.SqlDataAccessLayerBase.Querystring,params Data.SQL.SqlParameter[]中的参数'TStorage'。这有用吗?你说的“存在”是什么意思?无论如何,这可能不是问题所在。我认为问题很模糊,但在EF中,当我们通过查询查询时,T的类型应该是已知的,不应该是?类型是已知的,它是X、Y或Z。你说的“存在”是什么意思?无论如何,这可能不是问题所在。我认为这个问题很模糊,但在EF中,当我们通过查询查询时,T的类型应该是已知的,不应该是?类型是已知的,它是X、Y或Z。
public IEnumerable<T> BuildList<T>(String sql) where T : class, new()
{
    return Query<T>(sql);
}