Guest User

Untitled

a guest
Jun 18th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. namespace CSharp.Advanced.Sii.Trainings.Tests.Attributes
  2. {
  3. using System;
  4. using System.Linq.Expressions;
  5. using FluentAssertions;
  6. using Xunit;
  7.  
  8. public class _11_BuildingExpressions
  9. {
  10. [Fact]
  11. public void T1()
  12. {
  13. Expression<Func<int, int, int>> addNumbers = (a, b) => a + b;
  14. addNumbers.ToString()
  15. .Should()
  16. .Be("(a, b) => (a + b)");
  17.  
  18. addNumbers.Parameters[0]
  19. .Name.Should()
  20. .Be("a");
  21. addNumbers.Parameters[1]
  22. .Name.Should()
  23. .Be("b");
  24.  
  25. addNumbers.Parameters[0]
  26. .Type.Should()
  27. .Be<int>();
  28.  
  29. // ParameterExpression
  30. // ConstantExpression
  31.  
  32. var binaryExpression = addNumbers.Body as BinaryExpression;
  33. var left = binaryExpression?.Left as ParameterExpression;
  34. left?.Name.Should()
  35. .Be("a");
  36.  
  37. (binaryExpression?.Right as ParameterExpression)?.Name.Should()
  38. .Be("b");
  39. // var numbers = addNumbers(1,2);
  40. // numbers.Should()
  41. // .Be(3);
  42. }
  43.  
  44. [Fact]
  45. public void T2()
  46. {
  47. // a => a % 2
  48. var a = Expression.Parameter(typeof(int), "a");
  49. var dwa = Expression.Constant(2);
  50. var body = Expression.Modulo(a, dwa);
  51. var lambda = Expression.Lambda<Func<int, int>>(body, a);
  52.  
  53. lambda.ToString()
  54. .Should()
  55. .Be("a => (a % 2)");
  56.  
  57. var func = lambda.Compile();
  58. func(10)
  59. .Should()
  60. .Be(0);
  61. func(11)
  62. .Should()
  63. .Be(1);
  64. }
  65.  
  66. [Fact]
  67. public void DIY_1()
  68. {
  69. // (a,b) => a > b && b > 0
  70. var a = Expression.Parameter(typeof(int), "a");
  71. var b = Expression.Parameter(typeof(int), "b");
  72. var zero = Expression.Constant(0);
  73. var left = Expression.GreaterThan(a, b);
  74. var right = Expression.GreaterThan(b, zero);
  75. var body = Expression.AndAlso(left, right);
  76.  
  77. var lambda = Expression.Lambda<Func<int, int, bool>>(body, a, b);
  78. var func = lambda.Compile();
  79. func(2, 3)
  80. .Should()
  81. .BeFalse();
  82. func(3, 2)
  83. .Should()
  84. .BeTrue();
  85. func(2, 0)
  86. .Should()
  87. .BeFalse();
  88. }
  89.  
  90. [Fact]
  91. public void T3()
  92. {
  93. // a => a.Test1
  94.  
  95. var classToBeFiltered = new ClassToBeFiltered();
  96. var a = Expression.Parameter(classToBeFiltered.GetType(), "a");
  97. var body = Expression.Property(a, "Test1");
  98. var lambda = Expression.Lambda<Func<ClassToBeFiltered, int>>(body, a);
  99.  
  100. lambda.ToString()
  101. .Should()
  102. .Be("a => a.Test1");
  103. }
  104.  
  105. [Fact]
  106. public void TheProblem()
  107. {
  108. var request = new Request
  109. {
  110. Filter0 = new Filter
  111. {
  112. Field = "Test1",
  113. Value = "1",
  114. FilterType = FilterTypes.Gt
  115. },
  116. Filter1 = new Filter
  117. {
  118. Field = "Test2",
  119. Value = "2",
  120. FilterType = FilterTypes.Lt
  121. }
  122. };
  123.  
  124. // ??
  125.  
  126. // x.Test1 > 1
  127. // x.Test2 < 2
  128. // x => x.Test1 > 1 AndAlso x.Test2 < 2
  129.  
  130. // Convert.ChangeType()
  131. // Expression
  132. // Expression z Filter0 AndAlso Expression z Filter1
  133. // ClassToBeFilter jest obiektem na którym ma działać filtr
  134. // Test1 odwoluje sie do property Test1 z ClassToBeFiltered itd.
  135. // List<ClassToFiltered>().AsQueryable().Where(WynikNaszejOperacji);
  136. }
  137. }
  138. }
Add Comment
Please, Sign In to add comment