Skip to content

Commit 2846678

Browse files
committed
save
1 parent 07d37de commit 2846678

File tree

6 files changed

+189
-8
lines changed

6 files changed

+189
-8
lines changed

System.Linq.Dynamic.Core.sln

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docfx", "docfx", "{012536E6
9090
docfx\toc.yml = docfx\toc.yml
9191
EndProjectSection
9292
EndProject
93+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lab", "lab", "{E97833C1-77B6-44E2-8793-C1F952CA936F}"
94+
EndProject
95+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Z.Dynamic.Core.Lab", "Z.Dynamic.Core.Lab\Z.Dynamic.Core.Lab.csproj", "{CDD8D5BF-A212-43DD-B043-4B7242C553E0}"
96+
EndProject
9397
Global
9498
GlobalSection(SolutionConfigurationPlatforms) = preSolution
9599
Debug|Any CPU = Debug|Any CPU
@@ -504,6 +508,22 @@ Global
504508
{CD80A3AC-B0E1-45ED-BE07-DE6A0F1D4CD8}.Release|x64.Build.0 = Release|Any CPU
505509
{CD80A3AC-B0E1-45ED-BE07-DE6A0F1D4CD8}.Release|x86.ActiveCfg = Release|Any CPU
506510
{CD80A3AC-B0E1-45ED-BE07-DE6A0F1D4CD8}.Release|x86.Build.0 = Release|Any CPU
511+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
512+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
513+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|ARM.ActiveCfg = Debug|Any CPU
514+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|ARM.Build.0 = Debug|Any CPU
515+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|x64.ActiveCfg = Debug|Any CPU
516+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|x64.Build.0 = Debug|Any CPU
517+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|x86.ActiveCfg = Debug|Any CPU
518+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Debug|x86.Build.0 = Debug|Any CPU
519+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
520+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|Any CPU.Build.0 = Release|Any CPU
521+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|ARM.ActiveCfg = Release|Any CPU
522+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|ARM.Build.0 = Release|Any CPU
523+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|x64.ActiveCfg = Release|Any CPU
524+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|x64.Build.0 = Release|Any CPU
525+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|x86.ActiveCfg = Release|Any CPU
526+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0}.Release|x86.Build.0 = Release|Any CPU
507527
EndGlobalSection
508528
GlobalSection(SolutionProperties) = preSolution
509529
HideSolutionNode = FALSE
@@ -534,6 +554,7 @@ Global
534554
{D160E2CF-A7E1-4DDE-9AB8-8CFB0087DCEB} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
535555
{0034821E-740D-4553-821B-14CE9213C43C} = {7971CAEB-B9F2-416B-966D-2D697C4C1E62}
536556
{CD80A3AC-B0E1-45ED-BE07-DE6A0F1D4CD8} = {122BC4FA-7563-4E35-9D17-077F16F1629F}
557+
{CDD8D5BF-A212-43DD-B043-4B7242C553E0} = {E97833C1-77B6-44E2-8793-C1F952CA936F}
537558
EndGlobalSection
538559
GlobalSection(ExtensibilityGlobals) = postSolution
539560
SolutionGuid = {94C56722-194E-4B8B-BC23-B3F754E89A20}

Z.Dynamic.Core.Lab/Program.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace Z.Dynamic.Core.Lab
4+
{
5+
class Program
6+
{
7+
static void Main(string[] args)
8+
{
9+
Request_OrderBy_StringComparer.Execute();
10+
}
11+
}
12+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Globalization;
4+
using System.Linq;
5+
using System.Linq.Dynamic.Core;
6+
using System.Text;
7+
8+
namespace Z.Dynamic.Core.Lab
9+
{
10+
class Request_OrderBy_StringComparer
11+
{
12+
public class Customer
13+
{
14+
public string City { get; set; }
15+
public List<Order> Orders { get; set; }
16+
public string CompanyName { get; set; }
17+
public string Phone { get; set; }
18+
}
19+
public class Order
20+
{
21+
}
22+
23+
public static void Execute()
24+
{
25+
List<Customer> customers = new List<Customer>() { new Customer() { CompanyName = "Ååå"} ,
26+
new Customer() { CompanyName = "Bbb" } ,
27+
new Customer() { CompanyName = "Ååå" } ,
28+
new Customer() { CompanyName = "Bbb" } ,
29+
new Customer() { CompanyName = "Aaa" },
30+
new Customer() { CompanyName = "Aaa" },
31+
};
32+
33+
CultureInfo culture = new CultureInfo("nb-NO");
34+
var test1 = customers.AsQueryable().OrderBy(x => x.CompanyName, StringComparer.Create(culture, true)).ToList();
35+
var test2 = customers.AsQueryable().OrderBy(x => x.CompanyName).ToList();
36+
var test3 = customers.AsQueryable()
37+
.OrderBy("City").ThenBy("CompanyName", StringComparer.Create(culture, true)).ToDynamicList();
38+
var test4 = customers.AsQueryable()
39+
.OrderBy("CompanyName", StringComparer.Create(culture, true)).ToDynamicList();
40+
}
41+
}
42+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Linq.Dynamic.Core;
6+
7+
namespace Z.Dynamic.Core.Lab
8+
{
9+
public class Template_Simple
10+
{
11+
public class Customer
12+
{
13+
public string City { get; set; }
14+
public List<Order> Orders { get; set; }
15+
public string CompanyName { get; set; }
16+
public string Phone { get; set; }
17+
}
18+
public class Order
19+
{
20+
}
21+
22+
public static void Execute()
23+
{
24+
List<Customer> customers = new List<Customer>() {new Customer() {City = "ZZZ", CompanyName = "ZZZ", Orders = new List<Order>() {new Order()}, Phone = "555 5555"}};
25+
26+
var query = customers.AsQueryable()
27+
.Where("City == @0 and Orders.Count >= @1", "ZZZ", 1)
28+
.OrderBy("CompanyName")
29+
.Select("new(CompanyName as Name, Phone)").ToDynamicList();
30+
}
31+
}
32+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
10+
</ItemGroup>
11+
12+
<ItemGroup>
13+
<ProjectReference Include="..\src\System.Linq.Dynamic.Core\System.Linq.Dynamic.Core.csproj" />
14+
</ItemGroup>
15+
16+
</Project>

src/System.Linq.Dynamic.Core/DynamicQueryableExtensions.cs

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,6 +1273,18 @@ public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQuerya
12731273
return OrderBy(source, ParsingConfig.Default, ordering, args);
12741274
}
12751275

1276+
// NEED TEXT!
1277+
public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQueryable<TSource> source, [NotNull] ParsingConfig config, [NotNull] string ordering, IComparer comparer, params object[] args)
1278+
{
1279+
return (IOrderedQueryable<TSource>)InternalOrderBy((IQueryable)source, config, ordering, comparer, args);
1280+
}
1281+
1282+
// NEED TEXT!
1283+
public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQueryable<TSource> source, [NotNull] string ordering, IComparer comparer, params object[] args)
1284+
{
1285+
return OrderBy(source, ParsingConfig.Default, ordering, comparer, args);
1286+
}
1287+
12761288
/// <summary>
12771289
/// Sorts the elements of a sequence in ascending or descending order according to a key.
12781290
/// </summary>
@@ -1289,6 +1301,11 @@ public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQuerya
12891301
/// </code>
12901302
/// </example>
12911303
public static IOrderedQueryable OrderBy([NotNull] this IQueryable source, [NotNull] ParsingConfig config, [NotNull] string ordering, params object[] args)
1304+
{
1305+
return InternalOrderBy(source, config, ordering, null, args);
1306+
}
1307+
1308+
internal static IOrderedQueryable InternalOrderBy([NotNull] IQueryable source, [NotNull] ParsingConfig config, [NotNull] string ordering, IComparer comparer, params object[] args)
12921309
{
12931310
Check.NotNull(source, nameof(source));
12941311
Check.NotNull(config, nameof(config));
@@ -1302,10 +1319,22 @@ public static IOrderedQueryable OrderBy([NotNull] this IQueryable source, [NotNu
13021319

13031320
foreach (DynamicOrdering dynamicOrdering in dynamicOrderings)
13041321
{
1305-
queryExpr = Expression.Call(
1306-
typeof(Queryable), dynamicOrdering.MethodName,
1307-
new[] { source.ElementType, dynamicOrdering.Selector.Type },
1308-
queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
1322+
if (comparer == null)
1323+
{
1324+
queryExpr = Expression.Call(
1325+
typeof(Queryable), dynamicOrdering.MethodName,
1326+
new[] { source.ElementType, dynamicOrdering.Selector.Type },
1327+
queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
1328+
}
1329+
else
1330+
{
1331+
var comparerGenericType = typeof(IComparer<>).MakeGenericType(dynamicOrdering.Selector.Type);
1332+
queryExpr = Expression.Call(
1333+
typeof(Queryable), dynamicOrdering.MethodName,
1334+
new[] { source.ElementType, dynamicOrdering.Selector.Type },
1335+
queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)),
1336+
Expression.Constant(comparer, comparerGenericType));
1337+
}
13091338
}
13101339

13111340
var optimized = OptimizeExpression(queryExpr);
@@ -2176,6 +2205,18 @@ public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrdered
21762205
{
21772206
return ThenBy(source, ParsingConfig.Default, ordering, args);
21782207
}
2208+
2209+
// NEED TEXT!
2210+
public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrderedQueryable<TSource> source, [NotNull] ParsingConfig config, [NotNull] string ordering, IComparer comparer, params object[] args)
2211+
{
2212+
return (IOrderedQueryable<TSource>)InternalThenBy((IOrderedQueryable)source, config, ordering, comparer, args);
2213+
}
2214+
2215+
// NEED TEXT!
2216+
public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrderedQueryable<TSource> source, [NotNull] string ordering, IComparer comparer, params object[] args)
2217+
{
2218+
return ThenBy(source, ParsingConfig.Default, ordering, comparer, args);
2219+
}
21792220
/// <summary>
21802221
/// Performs a subsequent ordering of the elements in a sequence in ascending order according to a key.
21812222
/// </summary>
@@ -2193,6 +2234,11 @@ public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrdered
21932234
/// </code>
21942235
/// </example>
21952236
public static IOrderedQueryable ThenBy([NotNull] this IOrderedQueryable source, [NotNull] ParsingConfig config, [NotNull] string ordering, params object[] args)
2237+
{
2238+
return InternalThenBy(source, config, ordering, null, args);
2239+
}
2240+
2241+
internal static IOrderedQueryable InternalThenBy([NotNull] this IOrderedQueryable source, [NotNull] ParsingConfig config, [NotNull] string ordering, IComparer comparer, params object[] args)
21962242
{
21972243
Check.NotNull(source, nameof(source));
21982244
Check.NotNull(config, nameof(config));
@@ -2206,10 +2252,22 @@ public static IOrderedQueryable ThenBy([NotNull] this IOrderedQueryable source,
22062252

22072253
foreach (DynamicOrdering dynamicOrdering in dynamicOrderings)
22082254
{
2209-
queryExpr = Expression.Call(
2210-
typeof(Queryable), dynamicOrdering.MethodName,
2211-
new[] { source.ElementType, dynamicOrdering.Selector.Type },
2212-
queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
2255+
if (comparer == null)
2256+
{
2257+
queryExpr = Expression.Call(
2258+
typeof(Queryable), dynamicOrdering.MethodName,
2259+
new[] { source.ElementType, dynamicOrdering.Selector.Type },
2260+
queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
2261+
}
2262+
else
2263+
{
2264+
var comparerGenericType = typeof(IComparer<>).MakeGenericType(dynamicOrdering.Selector.Type);
2265+
queryExpr = Expression.Call(
2266+
typeof(Queryable), dynamicOrdering.MethodName,
2267+
new[] { source.ElementType, dynamicOrdering.Selector.Type },
2268+
queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)),
2269+
Expression.Constant(comparer, comparerGenericType));
2270+
}
22132271
}
22142272

22152273
var optimized = OptimizeExpression(queryExpr);

0 commit comments

Comments
 (0)