If you are using .NET Core, you’ll have quickly found that the .NET OData packages don’t work with it. Fortunately, the most recent (as of today) version of Microsoft.OData.Client (v7.5.0) works fine with .NET Core. Once you add the package to your project, you get a T4 file generated for you (.tt extension). Edit the Configuration class in the file and put in your connection info.
public static class Configuration { public const string MetadataDocumentUri = "http://localhost:58200/odata/"; public const bool UseDataServiceCollection = true; public const string NamespacePrefix = "ConsoleAppClient"; public const string TargetLanguage = "CSharp"; public const bool EnableNamingAlias = true; public const bool IgnoreUnexpectedElementsAndAttributes = true; }
Now you can use the auto-generated Container class to make OData calls against any OData service. Here’s some example usage.
var container = new Container(new Uri("http://localhost:58200/odata/")); var response = await container.Clients.ExecuteAsync(); var query = (DataServiceQuery)container .Clients .Expand("Address") .Where(it => it.Id > 10); var resp2 = await query.ExecuteAsync(); foreach (Client item in resp2) { Console.WriteLine(item.Address.City); } foreach (Client item in response) { Console.WriteLine(item.Name); } var c = container.Clients.ByKey(100); var s = await c.NameLength().GetValueAsync(); Console.WriteLine(s);
If you look at your IIS logs, you’ll see corresponding OData queries in there.
GET /odata/Clients - 58200 - ::1 Microsoft.OData.Client/7.5.0 - 200 0 0 31 GET /odata/Clients $filter=Id gt 10&$expand=Address 58200 - ::1 Microsoft.OData.Client/7.5.0 - 200 0 0 32 GET /odata/Clients(100)/Default.NameLength() - 58200 - ::1 Microsoft.OData.Client/7.5.0 - 200 0 0 130