Apply an OData text query (filter, order by, select, ..) to an IQueryable expression.
- Manipulate an IQueryable expression with OData text query
Params | In Memory Collections | Entity Framework | CosmosDB SQL API |
---|---|---|---|
$filter | + | + | + |
$orderby | + | + | + |
$select | + | + | - |
$expand | + | + | - |
$top | + | + | + |
$skip | + | + | + |
Please check samples below to get started
https://dotnetfiddle.net/6dLB2g
using System;
using System.Linq;
using OData2Linq;
public class Entity
{
public int Id { get; set; }
public string Name { get; set; }
}
public static class GetStartedDemo
{
public static void Demo()
{
Entity[] items =
{
new Entity { Id = 1, Name = "n1" },
new Entity { Id = 2, Name = "n2" },
new Entity { Id = 3, Name = "n3" }
};
IQueryable<Entity> query = items.AsQueryable();
var result = query.OData().Filter("Id eq 1 or Name eq 'n3'").OrderBy("Name desc").TopSkip("10", "0").ToArray();
// Id: 3 Name: n3
// Id: 1 Name: n1
foreach (Entity entity in result)
{
Console.WriteLine("Id: {0} Name: {1}", entity.Id, entity.Name);
}
}
}
Use .ToOriginalQuery()
after finishing working with OData to be able to support provider specific methods of original query.
Student[] array = await dbContext.Students.OData()
.Filter("LastName eq 'Alexander' or FirstMidName eq 'Laura'")
.OrderBy("EnrollmentDate desc")
.TopSkip("1","1")
.ToOriginalQuery() // required to be able to use .ToArrayAsync() next.
.ToArrayAsync();
ISelectExpandWrapper[] select2 = await dbContext.Students.OData()
.Filter("LastName eq 'Alexander' or FirstMidName eq 'Laura'")
.OrderBy("EnrollmentDate desc")
.SelectExpandAsQueryable("LastName", "Enrollments($select=CourseId)") //.SelectExpandAsQueryable() use .ToOriginalQuery() implicitly, so not need to call it.
.ToArrayAsync()
var item = await Container.GetItemLinqQueryable<TestEntity>().OData()
.Filter($"Id eq '{id1}'")
.TopSkip("1")
.ToOriginalQuery() // required to be able to use .ToFeedIterator() next.
.ToFeedIterator()
.ReadNextAsync()
See the Wiki pages
Please feel free to create issues and pull requests to the main branch.
This project is based on the following project: https://github.com/IharYakimush/comminity-data-odata-linq
The repository is a fork from: https://github.com/OData/AspNetCoreOData