IQueryableTest.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. using Vit.Extensions;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Vit.Core.Util.ComponentModel.Data;
  4. using Vit.Linq.Query;
  5. using Vit.Core.Util.ComponentModel.Query;
  6. using static Vit.Linq.MsTest.DataSource;
  7. namespace Vit.Linq.MsTest
  8. {
  9. [TestClass]
  10. public class IQueryableTest
  11. {
  12. #region (x.2)DataFilter
  13. [TestMethod]
  14. public void TestDataFilter()
  15. {
  16. var query = DataSource.GetIQueryable();
  17. //操作符。可为 "=", "!=", ">", "<" , ">=", "<=", "Contains", "NotContains", "StartsWith", "EndsWith", "IsNullOrEmpty", "IsNotNullOrEmpty", "In", "NotIn"
  18. #region (x.0) Count ToList ToArray
  19. {
  20. int count = query.IQueryable_Count();
  21. var list1 = query.IQueryable_ToList<ModelA>();
  22. var list2 = query.IQueryable_ToList();
  23. var array1 = query.IQueryable_ToArray<ModelA>();
  24. var array2 = query.IQueryable_ToArray();
  25. }
  26. #endregion
  27. #region (x.1) =
  28. {
  29. //(x.x.1)
  30. {
  31. var result = query.IQueryable_Where(new[] { new DataFilter { field = "id", opt = "=", value = 10 } }).IQueryable_ToList<ModelA>();
  32. Assert.AreEqual(result.Count, 1);
  33. Assert.AreEqual(result[0].id, 10);
  34. }
  35. //(x.x.2) == null
  36. {
  37. var item = query.IQueryable_Skip(10).IQueryable_FirstOrDefault<ModelA>();
  38. var pid = item.pid;
  39. item.pid = null;
  40. var result = query.IQueryable_Where(new[] { new DataFilter { field = "pid", opt = "=", value = null } }).IQueryable_FirstOrDefault<ModelA>();
  41. Assert.AreEqual(result?.id, 10);
  42. item.pid = pid;
  43. }
  44. }
  45. #endregion
  46. #region (x.2) !=
  47. {
  48. //(x.x.1)
  49. {
  50. var result = query.IQueryable_Where(new[] { new DataFilter { field = "id", opt = "!=", value = 10 } }).IQueryable_ToList<ModelA>();
  51. Assert.AreEqual(result.Count, 999);
  52. }
  53. //(x.x.2) != null
  54. {
  55. var item = query.IQueryable_Skip(10).IQueryable_FirstOrDefault<ModelA>();
  56. var pid = item.pid;
  57. item.pid = null;
  58. var result = query.IQueryable_Where(new[] { new DataFilter { field = "pid", opt = "!=", value = null } }).IQueryable_ToList<ModelA>();
  59. Assert.AreEqual(result.Count, 999);
  60. item.pid = pid;
  61. }
  62. }
  63. #endregion
  64. #region (x.3) > <
  65. {
  66. var result = query.IQueryable_Where(new[] { new DataFilter { field = "id", opt = ">", value = 10 }, new DataFilter { field = "id", opt = "<", value = 20 } }).IQueryable_ToList<ModelA>();
  67. Assert.AreEqual(result.Count, 9);
  68. }
  69. #endregion
  70. #region (x.4) >= <=
  71. {
  72. var result = query.IQueryable_Where(new[] { new DataFilter { field = "id", opt = ">=", value = 10 }, new DataFilter { field = "id", opt = "<=", value = 20 } }).IQueryable_ToList<ModelA>();
  73. Assert.AreEqual(result.Count, 11);
  74. }
  75. #endregion
  76. #region (x.5) Contains
  77. {
  78. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "Contains", value = "987" } }).IQueryable_ToList<ModelA>();
  79. Assert.AreEqual(result.Count, 1);
  80. Assert.AreEqual(result[0].id, 987);
  81. }
  82. #endregion
  83. #region (x.x) NotContains
  84. {
  85. //(x.x.1)
  86. {
  87. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "NotContains", value = "987" } }).IQueryable_ToList<ModelA>();
  88. Assert.AreEqual(result.Count, 999);
  89. }
  90. //(x.x.2)
  91. {
  92. var item = query.IQueryable_Where(
  93. new[] { new DataFilter { field = "name", opt = "Contains",value="987" } }
  94. ).IQueryable_FirstOrDefault<ModelA>();
  95. var oriName = item.name;
  96. item.name = null;
  97. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "NotContains", value = "987" } }).IQueryable_ToList<ModelA>();
  98. Assert.AreEqual(result.Count, 1000);
  99. item.name = oriName;
  100. }
  101. //(x.x.3)
  102. {
  103. var item = query.IQueryable_Where(
  104. new[] { new DataFilter { field = "name", opt = "Contains", value = "987" } }
  105. ).IQueryable_FirstOrDefault<ModelA>();
  106. var oriName = item.name;
  107. item.name = "";
  108. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "NotContains", value = "987" } }).IQueryable_ToList<ModelA>();
  109. Assert.AreEqual(result.Count, 1000);
  110. item.name = oriName;
  111. }
  112. }
  113. #endregion
  114. #region (x.6) StartsWith
  115. {
  116. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "StartsWith", value = "name98" } }).IQueryable_ToList<ModelA>();
  117. Assert.AreEqual(result.Count, 11);
  118. }
  119. #endregion
  120. #region (x.7) EndsWith
  121. {
  122. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "EndsWith", value = "987" } }).IQueryable_ToList<ModelA>();
  123. Assert.AreEqual(result.Count, 1);
  124. }
  125. #endregion
  126. #region (x.x) IsNullOrEmpty
  127. {
  128. var item = query.IQueryable_Skip(10).IQueryable_FirstOrDefault<ModelA>();
  129. var oriName = item.name;
  130. //(x.x.1)
  131. {
  132. item.name = null;
  133. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "IsNullOrEmpty" } }).IQueryable_ToList<ModelA>();
  134. Assert.AreEqual(result.Count, 1);
  135. item.name = oriName;
  136. }
  137. //(x.x.2)
  138. {
  139. item.name = "";
  140. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "IsNullOrEmpty" } }).IQueryable_ToList<ModelA>();
  141. Assert.AreEqual(result.Count, 1);
  142. item.name = oriName;
  143. }
  144. }
  145. #endregion
  146. #region (x.x) IsNotNullOrEmpty
  147. {
  148. var item = query.IQueryable_Skip(10).IQueryable_FirstOrDefault<ModelA>();
  149. var oriName = item.name;
  150. //(x.x.1)
  151. {
  152. item.name = null;
  153. var result = query.IQueryable_Where(
  154. new[] { new DataFilter { field = "name", opt = "IsNotNullOrEmpty" } }
  155. )
  156. .IQueryable_ToList<ModelA>();
  157. Assert.AreEqual(result.Count, 999);
  158. item.name = oriName;
  159. }
  160. //(x.x.2)
  161. {
  162. item.name = "";
  163. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "IsNotNullOrEmpty" } }).IQueryable_ToList<ModelA>();
  164. Assert.AreEqual(result.Count, 999);
  165. item.name = oriName;
  166. }
  167. }
  168. #endregion
  169. #region (x.8) In 1
  170. {
  171. var result = query.IQueryable_Where(new[] { new DataFilter { field = "id", opt = "In", value = new int[] { 3, 4, 5 } } }).IQueryable_ToList<ModelA>();
  172. Assert.AreEqual(result.Count, 3);
  173. }
  174. #endregion
  175. #region (x.9) In 2
  176. {
  177. query.IQueryable_FirstOrDefault<ModelA>().name = null;
  178. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "In", value = new[] { "name3", "name4", null } } }).IQueryable_ToList<ModelA>();
  179. Assert.AreEqual(result.Count, 3);
  180. }
  181. #endregion
  182. #region (x.10) NotIn
  183. {
  184. var result = query.IQueryable_Where(new[] { new DataFilter { field = "name", opt = "NotIn", value = new[] { "name3", "name4", null } } }).IQueryable_ToList<ModelA>();
  185. Assert.AreEqual(result.Count, 997);
  186. }
  187. #endregion
  188. #region (x.11) 多级field
  189. {
  190. var result = query.IQueryable_Where(new[] { new DataFilter { field = "b1.name", opt = "=", value = "name987_b1" } }).IQueryable_ToList<ModelA>();
  191. Assert.AreEqual(result.Count, 1);
  192. Assert.AreEqual(result[0].id, 987);
  193. }
  194. #endregion
  195. }
  196. #endregion
  197. #region (x.3)TestSortAndPage
  198. [TestMethod]
  199. public void TestSortAndPage()
  200. {
  201. var query = GetIQueryable();
  202. #region (x.1)
  203. {
  204. var result = query
  205. .IQueryable_Sort(new[] {
  206. new SortItem { field = "b1.pid", asc = false },
  207. new SortItem { field = "id", asc = true }
  208. })
  209. .IQueryable_Page(new PageInfo { pageIndex = 1, pageSize = 10 })
  210. .IQueryable_ToList<ModelA>();
  211. Assert.AreEqual(result.Count, 10);
  212. Assert.AreEqual(result[0].id, 990);
  213. }
  214. #endregion
  215. #region (x.2)
  216. {
  217. var result = query
  218. .IQueryable_Sort("id", false)
  219. .IQueryable_Page(2, 10)
  220. .IQueryable_ToList<ModelA>();
  221. Assert.AreEqual(result.Count, 10);
  222. Assert.AreEqual(result[0].id, 989);
  223. }
  224. #endregion
  225. #region (x.3)
  226. {
  227. var result = query
  228. .IQueryable_Sort(new[] {
  229. new SortItem { field = "b1.pid", asc = false },
  230. new SortItem { field = "id", asc = true }
  231. })
  232. .IQueryable_ToPageData<ModelA>(new PageInfo { pageIndex = 1, pageSize = 10 });
  233. Assert.AreEqual(result.totalCount, 1000);
  234. Assert.AreEqual(result.rows.Count, 10);
  235. Assert.AreEqual(result.rows[0].id, 990);
  236. }
  237. #endregion
  238. }
  239. #endregion
  240. }
  241. }