diff --git a/README.md b/README.md
index 590fd0e3..4d89bc14 100644
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@ The following frameworks are supported:
- net45 and up
- netstandard1.3
- netstandard2.0
-- uap10.0
+- uap10.0 (TODO...)s
## Fork details
This fork takes the basic library to a new level. Contains XML Documentation and examples on how to use it. Also adds unit testing to help ensure that it works properly.
diff --git a/System.Linq.Dynamic.Core.sln b/System.Linq.Dynamic.Core.sln
index 4bd30725..c1195933 100644
--- a/System.Linq.Dynamic.Core.sln
+++ b/System.Linq.Dynamic.Core.sln
@@ -53,6 +53,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp_netcore2.0_EF2.0
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MemoryLeakTest167", "src-console\MemoryLeakTest167\MemoryLeakTest167.csproj", "{AD4F83E5-4240-485D-BB5C-F43974F716E4}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp_netcore2.0_EF2.1", "src-console\ConsoleAppEF2.1\ConsoleApp_netcore2.0_EF2.1.csproj", "{EDF434F6-70C0-4005-B63E-0C365B3DA42A}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp_netcore2.1_EF2.1.1_InMemory", "src-console\ConsoleAppEF2.1.1_InMemory\ConsoleApp_netcore2.1_EF2.1.1_InMemory.csproj", "{E4286D1D-A98C-4516-9E47-CBF9739448DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp_netcore2.1_EF2.1.1", "src-console\ConsoleAppEF2.1.1\ConsoleApp_netcore2.1_EF2.1.1.csproj", "{F1880F07-238F-4A3A-9E58-141350665E1F}"
@@ -291,6 +293,22 @@ Global
{AD4F83E5-4240-485D-BB5C-F43974F716E4}.Release|x64.Build.0 = Release|Any CPU
{AD4F83E5-4240-485D-BB5C-F43974F716E4}.Release|x86.ActiveCfg = Release|Any CPU
{AD4F83E5-4240-485D-BB5C-F43974F716E4}.Release|x86.Build.0 = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|ARM.Build.0 = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|x64.Build.0 = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Debug|x86.Build.0 = Debug|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|ARM.ActiveCfg = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|ARM.Build.0 = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|x64.ActiveCfg = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|x64.Build.0 = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|x86.ActiveCfg = Release|Any CPU
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A}.Release|x86.Build.0 = Release|Any CPU
{E4286D1D-A98C-4516-9E47-CBF9739448DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4286D1D-A98C-4516-9E47-CBF9739448DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4286D1D-A98C-4516-9E47-CBF9739448DA}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -342,6 +360,7 @@ Global
{5DC68E83-ABE0-4887-B17E-1ED4EEE89C2C} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
{437473EE-7FBB-4C28-96EC-41E1AEE161F3} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
{AD4F83E5-4240-485D-BB5C-F43974F716E4} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
+ {EDF434F6-70C0-4005-B63E-0C365B3DA42A} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
{E4286D1D-A98C-4516-9E47-CBF9739448DA} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
{F1880F07-238F-4A3A-9E58-141350665E1F} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
EndGlobalSection
diff --git a/src-console/ConsoleAppEF2.1.1/Program.cs b/src-console/ConsoleAppEF2.1.1/Program.cs
index 37803140..ff0e7adc 100644
--- a/src-console/ConsoleAppEF2.1.1/Program.cs
+++ b/src-console/ConsoleAppEF2.1.1/Program.cs
@@ -61,7 +61,7 @@ static void Main(string[] args)
};
Console.WriteLine("all {0}", JsonConvert.SerializeObject(all, Formatting.Indented));
- var config = new ParsingConfig();
+ var config = ParsingConfig.DefaultEFCore21;
config.CustomTypeProvider = new C();
var context = new TestContext();
@@ -79,8 +79,11 @@ static void Main(string[] args)
context.SaveChanges();
}
- var carFirstOrDefault = context.Cars.Where(config, "Brand == \"Ford\"");
- Console.WriteLine("carFirstOrDefault {0}", JsonConvert.SerializeObject(carFirstOrDefault, Formatting.Indented));
+ var carFirstOrDefault1 = context.Cars.Where(config, "Brand == \"Ford\"");
+ Console.WriteLine("carFirstOrDefault1 {0}", JsonConvert.SerializeObject(carFirstOrDefault1, Formatting.Indented));
+
+ var carFirstOrDefault2 = context.Cars.Where(config, "Brand == @0", "Alfa");
+ Console.WriteLine("carFirstOrDefault2 {0}", JsonConvert.SerializeObject(carFirstOrDefault2, Formatting.Indented));
var carsLike1 =
from c in context.Cars
diff --git a/src-console/ConsoleAppEF2.1/ConsoleApp_netcore2.0_EF2.1.csproj b/src-console/ConsoleAppEF2.1/ConsoleApp_netcore2.0_EF2.1.csproj
new file mode 100644
index 00000000..4351e79f
--- /dev/null
+++ b/src-console/ConsoleAppEF2.1/ConsoleApp_netcore2.0_EF2.1.csproj
@@ -0,0 +1,21 @@
+
+
+
+ Exe
+ netcoreapp2.0
+ ConsoleAppEF21
+ ConsoleAppEF21
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src-console/ConsoleAppEF2.1/Database/Car.cs b/src-console/ConsoleAppEF2.1/Database/Car.cs
new file mode 100644
index 00000000..3c16220e
--- /dev/null
+++ b/src-console/ConsoleAppEF2.1/Database/Car.cs
@@ -0,0 +1,23 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace ConsoleAppEF21.Database
+{
+ public class Car
+ {
+ [Key]
+ public int Key { get; set; }
+
+ [Required]
+ [StringLength(8)]
+ public string Vin { get; set; }
+
+ [Required]
+ public string Year { get; set; }
+
+ [Required]
+ public string Brand { get; set; }
+
+ [Required]
+ public string Color { get; set; }
+ }
+}
diff --git a/src-console/ConsoleAppEF2.1/Database/TestContext.cs b/src-console/ConsoleAppEF2.1/Database/TestContext.cs
new file mode 100644
index 00000000..e15488fe
--- /dev/null
+++ b/src-console/ConsoleAppEF2.1/Database/TestContext.cs
@@ -0,0 +1,29 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Console;
+
+namespace ConsoleAppEF21.Database
+{
+ public class TestContext : DbContext
+ {
+ public static readonly LoggerFactory MyLoggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider((filter, includeScopes) => true, true) });
+
+ public virtual DbSet Cars { get; set; }
+
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ optionsBuilder.UseLoggerFactory(MyLoggerFactory); // Warning: Do not create a new ILoggerFactory instance each time
+ optionsBuilder.EnableSensitiveDataLogging();
+
+ optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=CarsEF20;Trusted_Connection=True;");
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity().HasKey(c => c.Key);
+ }
+
+ // https://stackoverflow.com/questions/46212704/how-do-i-write-ef-functions-extension-method
+ public static bool Like(string matchExpression, string pattern) => EF.Functions.Like(matchExpression, pattern);
+ }
+}
diff --git a/src-console/ConsoleAppEF2.1/Program.cs b/src-console/ConsoleAppEF2.1/Program.cs
new file mode 100644
index 00000000..9c6290a5
--- /dev/null
+++ b/src-console/ConsoleAppEF2.1/Program.cs
@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Dynamic.Core;
+using ConsoleAppEF21.Database;
+using Newtonsoft.Json;
+
+namespace ConsoleAppEF21
+{
+ class Program
+ {
+ //class C : AbstractDynamicLinqCustomTypeProvider, IDynamicLinkCustomTypeProvider
+ //{
+ // public HashSet GetCustomTypes()
+ // {
+ // var assemblies = AppDomain.CurrentDomain.GetAssemblies();
+
+ // var set = new HashSet(FindTypesMarkedWithDynamicLinqTypeAttribute(assemblies))
+ // {
+ // typeof(TestContext)
+ // };
+
+ // return set;
+ // }
+ //}
+
+ //private static IQueryable GetQueryable()
+ //{
+ // var random = new Random((int)DateTime.Now.Ticks);
+
+ // var x = Enumerable.Range(0, 10).Select(i => new
+ // {
+ // Id = i,
+ // Value = random.Next(),
+ // });
+
+ // return x.AsQueryable().Select("new (it as Id, @0 as Value)", random.Next());
+ // // return x.AsQueryable(); //x.AsQueryable().Select("new (Id, Value)");
+ //}
+
+ static void Main(string[] args)
+ {
+ var list = new List { new Car { Key = 1 }, new Car { Key = 2 } };
+
+ var carsTest = list.AsQueryable().Where("Key = @0", "1").ToList();
+
+ //IQueryable qry = GetQueryable();
+
+ //var result = qry.Select("it").OrderBy("Value");
+ //try
+ //{
+ // Console.WriteLine("result {0}", JsonConvert.SerializeObject(result, Formatting.Indented));
+ //}
+ //catch (Exception)
+ //{
+ // // Console.WriteLine(e);
+ //}
+
+ //var all = new
+ //{
+ // test1 = new List { 1, 2, 3 }.ToDynamicList(typeof(int)),
+ // test2 = new List { 4, 5, 6 }.ToDynamicList(typeof(int)),
+ // test3 = new List