Ver código fonte

New name ConvertToLambdaData

Lith 10 meses atrás
pai
commit
1b4527130b

+ 5 - 1
doc/TODO.md

@@ -33,5 +33,9 @@ users.Select(user => new { user.id, fid = user.fatherId ?? -1 }).OrderBy(m => m.
 
 
 
+
+
 # DbContext.QueryProcedure<Entity>(arg)  
-# DbFunction.PrimitiveSql  
+# DbFunction.PrimitiveSql 
+
+# nested stream, like :  group then join then group

+ 1 - 1
src/Vitorm/Sql/SqlDbContext.cs

@@ -310,7 +310,7 @@ namespace Vitorm.Sql
         protected virtual object ExecuteQuery(Expression expression, Type type)
         {
             // #1 convert to ExpressionNode 
-            ExpressionNode node = convertService.ConvertToData(expression, autoReduce: true, isArgument: QueryIsFromSameDb);
+            ExpressionNode node = convertService.ConvertToLambdaData(expression, autoReduce: true, isArgument: QueryIsFromSameDb);
             //var strNode = Json.Serialize(node);
 
 

+ 3 - 3
src/Vitorm/StreamQuery/StreamReader.cs

@@ -156,7 +156,7 @@ namespace Vitorm.StreamQuery
                         var parameterName = predicateLambda.parameterNames[0];
                         var groupByFields = groupedStream.groupByFields;
                         var memberBind = new MemberBind { name = "Key", value = groupByFields };
-                        var parameterValue = ExpressionNode.New(constructorArgs: new() { memberBind });
+                        var parameterValue = ExpressionNode.New(type: null, constructorArgs: new() { memberBind });
                         var newArg = arg.WithParameter(parameterName, parameterValue);
 
                         ExpressionNode having = ReadWhere(newArg, predicateLambda.body);
@@ -277,7 +277,7 @@ namespace Vitorm.StreamQuery
                                                 var parameterName = resultSelector.parameterNames[0];
                                                 var groupByFields = groupedStream.groupByFields;
                                                 var memberBind = new MemberBind { name = "Key", value = groupByFields };
-                                                var parameterValue = ExpressionNode.New(constructorArgs: new() { memberBind });
+                                                var parameterValue = ExpressionNode.New(type: null, constructorArgs: new() { memberBind });
                                                 var noChildParameterValue = ExpressionNode_RenameableMember.Member(stream: groupedStream.source, resultSelector.Lambda_GetParamTypes()[0]);
                                                 var newArg = arg.WithParameter(parameterName, parameterValue, noChildParameterValue: noChildParameterValue);
 
@@ -462,7 +462,7 @@ namespace Vitorm.StreamQuery
             {
                 var groupByFields = stream.groupByFields;
                 var memberBind = new MemberBind { name = "Key", value = groupByFields };
-                parameterValue = ExpressionNode.New(constructorArgs: new() { memberBind });
+                parameterValue = ExpressionNode.New(type: null, constructorArgs: new() { memberBind });
             }
             else
             {

+ 8 - 6
test/Vitorm.Sqlite.MsTest/ExpressionTreeTest/ExpressionTester.cs

@@ -1,9 +1,10 @@
-using System.Data;
-using System.Linq.Expressions;
-
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
+using System.Linq.Expressions;
 using Vit.Linq;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Data;
+using System.Collections.Generic;
+using System.Linq;
+using System;
 
 namespace Vit.Linq.ExpressionTree.ExpressionTreeTest
 {
@@ -14,6 +15,7 @@ namespace Vit.Linq.ExpressionTree.ExpressionTreeTest
         public static List<User> Test(IQueryable<User> query, Expression<Func<User, bool>> predicate)
         {
             var expected = GetSourceData().AsQueryable().Where(predicate).ToList();
+            if (expected.Count == 0) throw new Exception("result of predicate must not be empty");
 
             {
                 var actual = query.Where(predicate).ToList();
@@ -21,7 +23,7 @@ namespace Vit.Linq.ExpressionTree.ExpressionTreeTest
                 return actual;
             }
 
-            static void Check(List<User> expected, List<User> actual)
+            void Check(List<User> expected, List<User> actual)
             {
                 Assert.AreEqual(expected.Count, actual.Count);
                 for (var t = 0; t < expected.Count; t++)