I have the following class which returns an expression that then returns data. It seems a tad over complicated and I'm pretty sure LINQ has something to offer that makes my life much easier. But I simply cannot get it./// <summary>Provides methods and properties to query location details from a database.</summary>internal sealed class LocationDatabaseDetailsRequest : DatabaseDetailsRequest<LocationContext, LocationDataContract, Guid>{    /// <inheritdoc />    public override Func<LocationContext, LocationDataContract> Resource    {        get        {            return                c =>                c.Locations.Select(                    l =>                    new LocationDataContract                    {                        Id = l.Id,                        Coordinates = l.Coordinates,                        Description = l.Description,                        Name = l.Name,                        Type = l.Type,                        Details = this.GetDetails(l.Type, c)                    }).SingleOrDefault(i => i.Id == this.Identifier);        }    }    private LocationDetailsDataContract GetDetails(string detailsType, LocationContext locationContext)    {        switch (detailsType)        {            case City:                return locationContext.Set<CityDetailsDataContract>().SingleOrDefault(i => i.Id == this.Identifier);            case Planet:                return locationContext.Set<PlanetDetailsDataContract>().SingleOrDefault(i => i.Id == this.Identifier);            case StarSystem:                return locationContext.Set<StarSystemDetailsDataContract>().SingleOrDefault(i => i.Id == this.Identifier);            case Sector:                return locationContext.Set<SectorDetailsDataContract>().SingleOrDefault(i => i.Id == this.Identifier);            default:                return null;        }    }}My problem is the method call. I know which sets the data context has, but they are fluid, meaning it is certain that new sets will get added.Can I write this query shorter and well... better?
Improving LINQ expression with inner method call and switch statement
c#;linq;entity framework