Linq2GraphQL generates C# classes from the GraphQL schema and and togheter with the nuget package Linq2GraphQL.Client it makes it possible to query the server using Linq expressions.
A simple query that will get the first 10 orders with the primitive properties of orders and the connected customer.
var orders = await sampleClient
.Query
.Orders(first: 10)
.Include(e => e.Orders.Select(e => e.Customer))
.Select(e => e.Orders)
.ExecuteAsync();
A example mutation where we add a new customer and return the Customer Id.
var customerId = await sampleClient
.Mutation
.AddCustomer(new CustomerInput
{
CustomerId = Guid.NewGuid(),
CustomerName = "New Customer",
Status = CustomerStatus.Active
})
.Select(e=> e.CustomerId)
.ExecuteAsync();
There are two options to generate the client code from the GraphQL schema. Use the online tool to generate or install Linq2GraphQL.Generator as a tool.
Install/Update Tool:
dotnet tool update Linq2GraphQL.Generator -g --prerelease
Usage:
Linq2GraphQL.Generator <endpoint> [options]
Arguments:
<endpoint> Endpoint of the GraphQL service
Options:
-o, --output <output> Output folder, relative to current location [default: Linq2GraphQL_Generated]
-n, --namespace <namespace> Namespace of generated classes [default: YourNamespace]
-c, --client <client> Name of the generated client [default: GraphQLClient]
-t, --token <token> Bearertoken for authentication
-s, --subscriptions Include subscriptions (Exprimental)
-es --enum-strategy If AddUnknownOption all enums will have an additional Unknown option
-nu --nullabel Nullable client [default: false]
As an example:
Linq2GraphQL https://spacex-production.up.railway.app/ -c="SpaceXClient" -n="SpaceX" -o="Generated"
Would generate a client from url https://spacex-production.up.railway.app/ with the name SpaceXClient in the namespace SpaceX to folder Generated
Latest stable:
Latest prerelease:
dotnet add package Linq2GraphQL.Client --prerelease
The client adds a set of extensions to make it easier to add the client to dependency injection. As an example this would add SpaceXClient to the container:
services
.SpaceXClient(x =>
{
x.UseSafeMode = false;
})
.WithHttpClient(
httpClient =>
{
httpClient.BaseAddress = new Uri("https://spacex-production.up.railway.app/");
});
Turning on SafeMode will make the client before the first request to do an introspection query to the endpoint. The schema will be used to make sure that any auto included properties are available. This is an advanced feature that require the endpoint to support introspection. By default safe mode is turned of.
Linq2GraphQL is inspired by GraphQLinq , thank you Giorgi