Giter Site home page Giter Site logo

Comments (9)

paule96 avatar paule96 commented on June 1, 2024 1

Looks quite good. Incredible how fast you implemented that 😯
So you decided to create DynamicTypes out of each element in the JSONArray and then query on it.
I guess because it's the easiest way todo right now. Nice to see.

from system.linq.dynamic.core.

StefH avatar StefH commented on June 1, 2024

Thanks for the idea.

A way to implement this is to create projects which depend on System.Text.Json and Newtonssoft.Json which provide extension methods like Where on JsonDocument and JObject.

from system.linq.dynamic.core.

paule96 avatar paule96 commented on June 1, 2024

@StefH you mean something like:

public static IQueryable<T> Where(this IQueryable<T> source, string expression){
   // TODO: parse expression
  // TODO: Rebuild all Property access expression to access `GetProperty(propertName)`
  // TODO: return result
} 

from system.linq.dynamic.core.

StefH avatar StefH commented on June 1, 2024

More like this:

public static IQueryable<T> Where(this JsonDocument source, string expression)
{
}

Or

public static IQueryable<T> Where(this IObject source, string expression)
{
}

from system.linq.dynamic.core.

paule96 avatar paule96 commented on June 1, 2024

but shouldn't the base of the Extension method be something enumerable?
Also a JsonDocument can also be {}, that would result in an error I guess.
Shouldn't it be more like:

public static IQueryable<ArrayEnumerator> Where(this ArrayEnumerator source, string expression)
{
}

Then you can access over Current the current JsonElement and test the expression.

and on the user code side it would look like:

var jsonDocument = JsonDocument.Parse(@"[
    {
        ""first"": 1,
        ""City"": ""Paris"",
        ""third"": ""012-04-23T18:25:43.511Z""
    }]");
if(jsonDocument.RootElement.ValueKind != JsonValueKind.Array){
   throw new Exception("Must be an array");
}
jsonDocument.RootElement.EnumerateArray().Where("City ==\"Paris\"");

That would also allow us to use the extension method to use it inside of a JSON document.

from system.linq.dynamic.core.

paule96 avatar paule96 commented on June 1, 2024

Hm I'm also not sure if the extension of Where is the correct idea. If I understand it correctly that would mean that we need to reimplement the ExpressionParser for it. Wouldn't it be better to allow, that the currently private methods of the ExpressionParser can be overwritten? In this case the ParseMemberAccess method. Then we could create kinda easy second project and make a special implementation of ParseMemberAccess for JsonElement.

But maybe I don't understand the project structure well enough jet.

from system.linq.dynamic.core.

StefH avatar StefH commented on June 1, 2024

#791 WIP...

from system.linq.dynamic.core.

StefH avatar StefH commented on June 1, 2024

I'm adding all methods and also working on System.Text.Json implementation. Can you take a look at the PR (WIP)?

from system.linq.dynamic.core.

paule96 avatar paule96 commented on June 1, 2024

Yes I will review today :)

from system.linq.dynamic.core.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.