Comments (12)
@ReginaldBull
Please provide a full working example dotnetfiddle
from system.linq.dynamic.core.
I don't know how to provide a fiddle example for a problem that exists within a WebGL (wasm) compiled project.
from system.linq.dynamic.core.
Can you provide the part from your own code (including the entities / dtos) and the Dynamic LINQ Expression you are trying to parse?
from system.linq.dynamic.core.
Basically it all boils down to this:
public class CustomTypeProvider : DefaultDynamicLinqCustomTypeProvider
{
private readonly HashSet<Type> _types;
public CustomTypeProvider(Type[] types)
{
_types = new HashSet<Type>(types ?? new Type[]
{
})
{
typeof(Choice),
typeof(ProductConfiguration),
typeof(IEnumerable<>)
};
}
public override HashSet<Type> GetCustomTypes() => _types;
}
public class ProductConfiguration{
public string Code {get; private set;}
public IEnumerable<IChoice> Choices {get; private set;}=new List<IChoice>();
}
public interface IChoice {
string Reference{get}
}
public class Choice : IChoice{
public string Reference {get; private set;}
}
string expression = "input.Choices.FirstOrDefault(p => p.Reference == \"MyReference\")";
Type[] customTypes = new []{
typeof(Choice),
typeof(ProductConfiguration),
typeof(IEnumerable<>)
};
ParameterExpression[] parameterExpressions = new []{
Expression.Parameter(typeof(ProductConfiguration), "input")
};
ParsingConfig config = new ParsingConfig
{
CustomTypeProvider = new CustomTypeProvider(customTypes),
IsCaseSensitive = false
};
EpxressionParser parser = new ExpressionParser(parameterExpressions, expression, new object[]{}, config);
Expression exp = parser.Parse<Choice>(expression, parameterExpression, customTypes);
ProductConfiguration productConfiguration = CreateValidProductConfiguration();
object[] input = new object[]{
productConfiguration
};
var result = exp(input);
As mentioned, running it locally it works. The problem shows up when using that approach inside a Unity3D WebGL build.
from system.linq.dynamic.core.
Can you make a simple and small Unity3D WebGL
example project ?
from system.linq.dynamic.core.
I created a minimal project for reproduction:
https://github.com/ReginaldBull/LinqDynamicCoreUnity3D
from system.linq.dynamic.core.
@ReginaldBull
Thanks for the project, however this is still a very big project. Can you please make a very easy and simple test project please?
from system.linq.dynamic.core.
Hello,
I removed some unnecessary folders. But this is quite a small project. The source in question can be found under the folder Assets/Scripts.
from system.linq.dynamic.core.
@ReginaldBull
Sorry, I cannot open this project, I do not have all dependencies installed on my system.
Can you maybe use the extension method instead of directly using new ExpressionParser
?
And try to write the query you want to execute first as normal LINQ query, and from that, create a the dynamic.
Example:
using System.Linq.Dynamic.Core;
using ConsoleApp1;
string expression = "Choices.FirstOrDefault(p => p.Reference == \"MyReference\")";
Type[] customTypes = new[]
{
typeof(Choice),
typeof(ProductConfiguration),
typeof(IEnumerable<>)
};
var config = new ParsingConfig
{
CustomTypeProvider = new CustomTypeProvider(customTypes),
IsCaseSensitive = false
};
var productConfiguration = new ProductConfiguration("code");
var input = new[]
{
productConfiguration
};
var result = input.Select(i => i.Choices.FirstOrDefault(c => c.Reference == "MyReference")).ToArray();
var resultQ = input.AsQueryable().Select(config, expression).ToDynamicArray();
from system.linq.dynamic.core.
Thank you.
Today I tried with the extension method.
Running it in Unity Editor mode is working fine but as soon as the web assembly is generated it produces the same error described at the start of this issue.
from system.linq.dynamic.core.
One additional finding. I tried again and debugged a bit in deep and found this exception occuring:
System.IO.FileNotFoundException: Could not load the file 'System.Private.Corelib'.
System.IO.FileNotFoundException: Could not load the file 'System.Private.Corelib'. File name: 'System.Private.Corelib' at System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x0007a] in <35594092a38441a79b40e2237d5e8762>:0 at (wrapper remoting-invoke-with-check) System.AppDomain.Load(System.Reflection.AssemblyName,System.Security.Policy.Evidence) at System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] in <35594092a38441a79b40e2237d5e8762>:0 at (wrapper remoting-invoke-with-check) System.AppDomain.Load(System.Reflection.AssemblyName) at System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00005] in <35594092a38441a79b40e2237d5e8762>:0 at System.Linq.Dynamic.Core.Parser.EnumerationsFromMscorlib.AddEnumsFromAssembly (System.String assemblyName) [0x00006] in <4cc38c5670114affad31d8b74c3f62b1>:0
from system.linq.dynamic.core.
@ReginaldBull
Maybe related to?
from system.linq.dynamic.core.
Related Issues (20)
- Value typed property from subquery are casted as `object` HOT 4
- SelectMany collectionSelectorArgs not allowing context.Set<>() HOT 1
- C# Entity Framework Core - OrderBy and Where don't work with `[ComplexType]` HOT 6
- try to call function inside select HOT 3
- Basic performance consideration question HOT 1
- try to parse lambda with function inside .
- Performance Issue with EF Core 8.0 and Microsoft.EntityFrameworkCore.DynamicLinq Package HOT 8
- Question About Parameters HOT 4
- Parser interpreting the two consecutive escape sequences \"\" as a single escape sequence HOT 11
- query generated with dynamic linq not parse parameter linq as parameter sql !!! HOT 1
- Add JSON support HOT 9
- .NET 8 (and possible all non-NETSTANDARD and higher versions) attempt to load EF 6 types HOT 16
- Add ParsingConfig option to support single quotes in place of double quotes
- Failure in ParseArgumentList when using lambda filter on list of dictionaries HOT 1
- DynamicExpressionParser.ParseLambda regressions in v1.3.10
- Error with 'Equals' together with other parameters HOT 4
- ExpressionParser finds Types from IEnumerable instead of IQueryable (breaks Code) (worked in 1.3.9) HOT 1
- Updating to 1.3.13 - No property or field 'XXXXX' exists in type 'Char'
- Issue with Where() method when filtering multiple string properties while using ToLower() HOT 1
- >= 1.3.3 Slow First Dynamic Select HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from system.linq.dynamic.core.