C# 在.net core中将泛型类与graphql一起使用
我是新手,我正在制作一个小网站,用于管理学生和课堂 在我的应用程序中,我有一个泛型类:C# 在.net core中将泛型类与graphql一起使用,c#,.net-core,graphql,asp.net-core-2.0,asp.net-core-webapi,C#,.net Core,Graphql,Asp.net Core 2.0,Asp.net Core Webapi,我是新手,我正在制作一个小网站,用于管理学生和课堂 在我的应用程序中,我有一个泛型类: public class RangeModel<TFrom, TTo> { #region Propertes public TFrom From { get; set; } public TTo To { get; set; } #endregion } 并将我的查询定义如下: var studentsQue
public class RangeModel<TFrom, TTo>
{
#region Propertes
public TFrom From { get; set; }
public TTo To { get; set; }
#endregion
}
并将我的查询定义如下:
var studentsQueryArguments = new QueryArguments();
studentsQueryArguments.Add(new QueryArgument<ListGraphType<IntGraphType>> { Name = "ids", Description = "Student indexes." });
studentsQueryArguments.Add(new QueryArgument<ObjectGraphType<RangeModelType<double?, double?>>>{Name = "age", Description = "Age range of student."});
Field<ListGraphType<StudentType>>(
"students",
arguments: studentsQueryArguments,
resolve: context =>
{
// Resolve data...
return results;
});
}
var studentsQueryArguments=newqueryarguments();
添加(新的QueryArgument{Name=“ids”,Description=“Student index.”);
添加(新的QueryArgument{Name=“age”,Description=“学生的年龄范围”。});
场(
“学生”,
论点:studentsQueryArguments,
解析:上下文=>
{
//解析数据。。。
返回结果;
});
}
当我运行我的应用程序并进行查询时。返回了一个异常,该异常表示:
无法将GraphQL.Types.ObjectGraphType1[GraphQlStudy.Models.GraphQL.Types.RangeModelType2[System.Nullable1[System.Double],System.Nullable1[System.Double]]]”类型的对象强制转换为“GraphQL.Types.ScalarGraphType”
我一直在搜索使用GraphQL和泛型类的教程,但没有提到使用这种泛型类
有人能帮我吗
谢谢,在花了几个小时之后,我有以下解决方案
RangeModel.cs
定义为:
public class RangeModel<TFrom, TTo>
{
public TFrom From { get; set; }
public TTo To { get; set; }
}
studentsQueryArguments.Add(new QueryArgument<RangeModelType<double?, double?>> {Name = "age", Description = "Age range of student."});
studentsQueryArguments.Add(新的QueryArgument{Name=“age”,Description=“学生的年龄范围”);
希望有帮助。我对graphQL了解不多,但这看起来ObjectGraphType和ScalarGraphType不兼容,与泛型无关。。。您可以使用更简单的objectgraphtype来验证这一点。
public class RangeModelType<TFrom, TTo> : InputObjectGraphType<RangeModel<TFrom, TTo>>
{
public RangeModelType()
{
var fromType = typeof(TFrom);
Field(x => x.From, fromType.IsGenericType && fromType.GetGenericTypeDefinition() == typeof(Nullable<>));
var toType = typeof(TTo);
Field(x => x.To, toType.IsGenericType && toType.GetGenericTypeDefinition() == typeof(Nullable<>));
}
}
studentsQueryArguments.Add(new QueryArgument<RangeModelType<double?, double?>> {Name = "age", Description = "Age range of student."});