Trabalhando em torno da falta de inferência de tipo genérico parcial com restrições

Eu tenho uma interface (que é usada por repositórios) que tem esse membro:

T FindById<T, TId>(TId id)
    where T : class, IEntity<TId>
    where TId : IEquatable<TId>;

Isso permite que o chamador especifique um tipo de entidade (T) e o tipo deId campo (TId). O implementador dessa interface, então, encontraria as entidades do tipoT e use oid parâmetro para filtrá-los de acordo com seu id (que é definido emIEntity<TId>).

Atualmente estou chamando assim:

int id = 123;
var myApproval = PartsDC.FindById<Approval, int>(id);

Idealmente eu gostaria de fazer isso:

int id = 123;
var myApproval = PartsDC.FindById<Approval>(id);

Eu li as respostas para esta pergunta:

Inferência de tipo genérico parcial possível em C #?

Eu entendo que não consigo obter a sintaxe que quero, mas posso chegar perto. Não consigo configurar corretamente no meu caso, por causa de minhas restrições genéricas de parâmetro.

Aqui está o que eu tenho até agora:

public class FindIdWrapper<T> where T : class
{
    public readonly IDataContext InvokeOn;

    public FindIdWrapper(IDataContext invokeOn)
    {
        InvokeOn = invokeOn;
    }

    T ById<TId>(TId id) where TId : IEquatable<TId>
    {
        return InvokeOn.FindById<T, TId>(id);
    }
}

public static class DataContextExtensions
{
    public static FindIdWrapper<T> Find<T>(this IDataContext dataContext) where T : class, IEntity
    {
        return new FindIdWrapper<T>(dataContext);
    }
}

O erro de compilação que recebo é:

The type 'T' cannot be used as type parameter 'T' in the generic type or method 'PartsLegislation.Repository.IDataContext.FindById<T,TId>(TId)'. There is no implicit reference conversion from 'T' to 'PartsLegislation.Repository.IEntity<TId>'.

Eu entendo o que está dizendo porque oT na minha classe wrapper é apenas restrito a ser um tipo de referência, mas oFindById função quer que sejaIEntity<TId>, mas eu não posso fazer isso como oTId está no método (caso contrário, estou de volta ao quadrado).

Como posso contornar este problema (ou não posso)?

questionAnswers(1)

yourAnswerToTheQuestion