0

リンク テーブルで結合され、OData/Entity Framework を介して公開される 2 つのテーブルがあります。

  • ユーザー
  • ユーザー・グループ

~/api/Users を使用すると、次の[USER]API コントローラー アクションが結果を返します。

    public IEnumerable<USER> Get(ODataQueryOptions<USER> options)
    {
        var unitOfWork = new ATMS.Repository.UnitOfWork(_dbContext);

        var users = options.ApplyTo(unitOfWork.Repository<USER>().Queryable
                                              .Include(u => u.USERGROUPS)
                                              .OrderBy(order => order.USERNAME))
                                              .Cast<USER>().ToList();

        unitOfWork.Save();      // includes Dispose()

        return users;
    }

[USERGROUP]ただし、次のAPI コントローラー アクションに ODataQueryOptions を適用できません。

    public IEnumerable<USERGROUP> Get(ODataQueryOptions<USER> options)
    {
        var unitOfWork = new ATMS.Repository.UnitOfWork(_dbContext);

        var userGroups = options.ApplyTo(unitOfWork.Repository<USERGROUP>().Queryable
                                .Include(u => u.USERS)
                                .OrderBy(order => order.GROUPNAME))
                                .Cast<USERGROUP>().ToList();

        unitOfWork.Save();      // includes Dispose()

        return userGroups.AsQueryable();
    }

すると、次のエラーが表示されます。

「DAL.USER」の ODataQueryOptions を「DAL.USERGROUP」の IQueryable に適用できません。

代わりに、次を省略する必要がありoptions.ApplyTo(...)ます。

        var userGroups = unitOfWork.Repository<USERGROUP>()
                                .Query()
                                .Include(u => u.USERS)
                                .Get()
                                .OrderBy(order => order.GROUPNAME);

誰かが私にこれがなぜなのか説明してもらえますか?

ありがとう。

4

1 に答える 1