Program2.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Vit.Core.Module.Serialization;
  2. using Vit.Linq;
  3. using Vit.Linq.ExpressionNodes;
  4. namespace App
  5. {
  6. internal class Program2
  7. {
  8. static void Main2(string[] args)
  9. {
  10. var users = new[] { new User(1), new User(2), new User(3), new User(4) };
  11. var query = users.AsQueryable();
  12. var queryExpression = users.AsQueryable().Where(m => m.id > 0).OrderBy(m => m.id).Skip(1).Take(2);
  13. #region #1 Expression to ExpressionNode (Code to Data)
  14. var node = ExpressionConvertService.Instance.ConvertToData_LambdaNode(queryExpression.Expression);
  15. var strNode = Json.Serialize(node);
  16. #endregion
  17. #region #2 ExpressionNode to QueryAction
  18. var queryAction = new Vit.Linq.ExpressionNodes.Query.QueryAction(node);
  19. var strQuery = Json.Serialize(queryAction);
  20. #endregion
  21. // #3 compile code
  22. var predicate = ExpressionConvertService.Instance.ConvertToCode_PredicateExpression<User>(queryAction.filter);
  23. //var lambdaExp = (Expression<Func<Person, bool>>)convertService.ToLambdaExpression(queryAction.filter, typeof(User));
  24. var rangedQuery = query.Where(predicate).OrderBy(queryAction.orders);
  25. if (queryAction.skip.HasValue)
  26. rangedQuery = rangedQuery.Skip(queryAction.skip.Value);
  27. if (queryAction.take.HasValue)
  28. rangedQuery = rangedQuery.Take(queryAction.take.Value);
  29. var result = rangedQuery.ToList();
  30. var count = result.Count;
  31. }
  32. class User
  33. {
  34. public User(int id) { this.id = id; this.name = "name" + id; }
  35. public int id { get; set; }
  36. public string name { get; set; }
  37. }
  38. }
  39. }