C#C
C#3y ago
Anton

❔ HotChocolate with IQueryable, apply a required filter on the ef entity

Basically, I'm trying to find a way to configure an IObjectFieldDescriptor by adding a required argument to it, which should in turn apply a filter on the database entity. In this case, I'm adding a companyId argument, and then applying the respective filter manually, before mapping. What should I do to configure this in a simpler way? Let me show you what I have and then what I mean by a better way.

This is what I have so far. Don't mind the FieldCollectionQuery and UseBuiltinMiddleware extension methods, they are there to set up the ef core stuff. The argument is the important bit right now.
public sealed class QueryType : ObjectType
{
    protected override void Configure(IObjectTypeDescriptor descriptor)
    {
        descriptor
            .FieldCollectionQuery<SupplierGraphDtoType>("suppliers")
            .Argument("companyId", a => a.Type<NonNullType<IntType>>())
            .UseBuiltinMiddleware<SupplierGraphDtoType>(MiddlewareFlags.All)
            .Resolve(ctx =>
            {
                var q = ctx.DbContext<DataContext>()
                    .Set<Supplier>()
                    .AsQueryable();

                int companyId = ctx.ArgumentValue<int>("companyId");
                q = q.Where(s => s.CompanyId == companyId);

                return q.ProjectTo<Supplier, SupplierGraphDto>(ctx);
            });
    }
}
Was this page helpful?