我目前正在为ASP.NET 4.5中的LINQ查询过滤器。我检索了2种不同的IQueryable
种不同的表类型。
我会这样调用我的过滤方法:
var result = new Dictionary<DateTime, MyData>();
if(x = 1)
{
var base = (from t in ctx.OldProjctStatistic
select t);
result = GetProjectData(base);
}
else {
var base = (from t in ctx.NewProjectStatistic
select t);
result = GetProjectData(base);
}
我需要编写一个方法来过滤此结果,与其类型无关。我目前的实现如下:
private static Dictionary<DateTime, MyData> GetProjectData(IQueryable<T> base) where T : class
{
// this method stub doesn't work unfortunately
return null;
}
不幸的是,我在声明我的过滤器方法时遇到以下错误:
非泛型约束不允许使用约束
您是否知道如何编写通用方法,以过滤2种不同类型的结果?
谢谢!
答案 0 :(得分:1)
要将参数T
识别为通用参数,必须将其括在< >
括号中,该括号表示通用参数。如果您想在此方法中对通用参数应用约束,则必须将其包含在方法的签名中:
private static Dictionary<DateTime, MyData> GetProjectData<T>(...) where T: ...
如果编译器在方法中找不到声明,它将在类级别上搜索,是否可以找到泛型类
public class MyClass<T>{...}
如果找不到任何一种情况,它会认为T
只是某种对象类型(可能是你自己的发明),并告诉你不能约束普通类型,因为它已经定义了......
有关generic methods an constrains的更多信息,请访问Microsoft编程指南
的链接答案 1 :(得分:0)
通用约束只能在通用方法中使用。所以你必须使你的方法通用:
private static Dictionary<DateTime, MyData> GetProjectData<T>(IQueryable<T> base) where T : class
{
// this method stub doesn't work unfortunately
return null;
}
您不必更改通话,因为可以推断出类型参数。