OData V4. NET вложенные свойства ядра не могут быть переведены из Linq - PullRequest
1 голос
/ 06 мая 2020
• 1000 1004 *

https: // {server}: {port} / v1 / Entities? $ Expand = ownBy & $ orderby = ownBy / userName

, и я получаю следующее сообщение об ошибке:

 System.InvalidOperationException: The LINQ expression 'DbSet<Entity>
    .LeftJoin(
          outer: DbSet<User>, 
        inner: p => EF.Property<Nullable<Guid>>(p, "OwnById"), 
        outerKeySelector: u => EF.Property<Nullable<Guid>>(u, "UserId"), 
        innerKeySelector: (o, i) => new TransparentIdentifier<Portfolio, User>(
            Outer = o, 
            Inner = i
        ))
    .OrderBy(p => EF.Property<Nullable<Guid>>(p.Inner, "UserId") == null ? null : new UserModel{ 
        UserEmail = p.Inner.UserEmail, 
        UserFirstName = p.Inner.UserFirstName, 
        UserId = p.Inner.UserId, 
        UserLastName = p.Inner.UserLastName, 
        Username = p.Inner.Username 
    }
    .Username)' could not be translated.

Кажется, это довольно простой пример, и я не понимаю, почему его так сложно перевести.

Вот мой контроллер, использующий автомаппер:

    [ODataRoute]
    [Produces("application/json")]
    [ProducesResponseType(typeof(ODataValue<IEnumerable<EntityModel>>), Status200OK)]
    [ProducesResponseType(Status404NotFound)]
    [EnableQuery(AllowedQueryOptions = All, MaxTop = 100)]
    public IQueryable<EntityModel> Get()
    {
        var results = _Query.Get();
        return results.ProjectTo<EntityModel>(_Mapper.ConfigurationProvider);
    }

Конфигурация Automapper:

 CreateMap<Entity, EntityModel>();

Метаданные:

    <EntityType Name="EntityModel">
        <Key>
            <PropertyRef Name="entityId" />
        </Key>
        ...
        <Property Name="ownById" Type="Edm.Guid" />
        ...
        <NavigationProperty Name="ownBy" Type="AMI.UserModel" />
    </EntityType>

    <EntityType Name="UserModel">
        <Key>
            <PropertyRef Name="userId" />
        </Key>
        <Property Name="userId" Type="Edm.Guid" Nullable="false" />
        <Property Name="username" Type="Edm.String" />
        <Property Name="userFirstName" Type="Edm.String" />
        <Property Name="userLastName" Type="Edm.String" />
        <Property Name="userEmail" Type="Edm.String" />
    </EntityType>

Любая помощь будет очень признательна.

...