Я использую эту библиотеку для генерации клиента и некоторого интерфейса для моей схемы graphql: https://github.com/lukemurray/DotNetGraphQLQueryGen
Мой код выглядит примерно так:
public abstract class MutationBase
{
public Task<GqlResult<TResult>> RunQueryAsync<TResult>()
{
// some stuff
return RunQueryAsyncInternal<TResult>();
}
protected abstract Task<GqlResult<TResult>> RunQueryAsyncInternal<TResult>();
}
public class SomeMutationWrapper : MutationBase
{
protected override Task<GqlResult<TResult>> RunQueryAsyncInternal<TResult>()
{
return _client.MutateAsync(
m => m.SomeMutation(
param1, param2,
s => (TResult)new { s.Id, s.Name }
)
);
}
}
Генерируемый интерфейс выглядит примерно так:
public interface Mutation
{
[GqlFieldName("someMutation")]
TReturn SomeMutation<TReturn>(string param1, string param2, Expression<Func<SomeMutationsReturnType, TReturn>> selection);
}
public interface SomeMutationsReturnType
{
[GqlFieldName("id")] int Id { get; }
[GqlFieldName("name")] string Name { get; }
}
И я тоже хочу назвать это так:
public class ConsumerClass
{
public async void Consume()
{
SomeMutationWrapper wrapper = new SomeMutationWrapper();
var resp = wrapper.RunQueryAsync<SomeMutationsReturnType>();
Console.WriteLine($"Id: {resp.Data.Id} | Name: {resp.Data.Name}");
}
}
Проблема в реализации RunQueryAsyncInternal
в части выбора лямбды: s => (TResult)new { s.Id, s.Name }
Это дает мне ошибку в заголовке.
Error CS0030 Cannot convert type '<anonymous type: int Id, string Name>' to 'TResult'
Как я могу устранить эту ошибку преобразования (без изменения сгенерированного кода клиента или интерфейса)