Web API OData: ¿Cómo expandir $ en una sola entidad?

He leído ambosestas artículos varias veces para tratar de encontrar una manera de utilizar el$expand Opción de consulta en una sola entidad, pero en todas y cada una de las formas en que lo he intentado, parece que no puedo hacer que funcione. Todas las otras opciones de consulta funcionan y$expand También trabaja actualmente en los resultados de la colección.

Modelo: Las entidades de jugador tienen una propiedad de navegación llamada Estadísticas en la que cada objeto contiene las estadísticas de ese jugador para un año determinado.

He configurado OData de esta manera:

config.EnableQuerySupport();

ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Player>("OPlayer");
modelBuilder.EntitySet<PlayerStatistics>("OPlayerStats");

Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);

Originalmente, había configurado mi controlador de esta manera:

public class OPlayerController : EntitySetController<Player, int>
{
    private readonly DatabaseContext _db = new DatabaseContext();

    protected override Player GetEntityByKey(int key)
    {
        return _db.Players.FirstOrDefault(p => p.PlayerId == key);
    }

    public override IQueryable<Player> Get()
    {
        return _db.Players.AsQueryable();
    }

    protected override void Dispose(bool disposing)
    {
        _db.Dispose();
        base.Dispose(disposing);
    }
}

Con esta configuración, puedo hacer estas consultas:

/odata/OPlayer(600)/odata/OPlayer/odata/OPlayer?$expand=Stats

Pero evidentemente no (el resultado no se expande):

/odata/OPlayer(600)?$expand=Stats

Ambos artículos mencionan que para admitirlo, debe agregar un método (¿acción?) A su controlador que tenga este aspecto:

[Queryable]
public SingleResult<Player> GetPlayer(int id)
{
    return SingleResult.Create(_dbContext.Players.Where(c => c.ID == id);
}

Cuando agrego esto a mi controlador, ambos/odata/OPlayer(600) y/odata/OPlayer(600)?$expand=Stats regresoNo action was found on the controller 'OPlayer' that matches the request.

¿Alguien puede proporcionar aclaraciones o dar indicaciones para apoyar?$expand en una sola entidad?

Respuestas a la pregunta(1)

Su respuesta a la pregunta