PageRenderTime 69ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/Demo/Linq/Demo/Program.cs

https://github.com/ACher/bltoolkit
C# | 740 lines | 646 code | 94 blank | 0 comment | 20 complexity | db1b93cd51e0780762a8e047fb89aaa3 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Linq.Expressions;
  6. using BLToolkit.Data;
  7. using BLToolkit.Data.Linq;
  8. namespace Linq.Demo
  9. {
  10. using DataModel;
  11. static class Program
  12. {
  13. static void Main()
  14. {
  15. DbManager.TraceSwitch = new TraceSwitch("DbManager", "DbManager trace switch", "Info");
  16. FirstTest();
  17. CountTest();
  18. SingleTableTest();
  19. SelectManyTest();
  20. InnerJoinTest();
  21. LeftJoinTest();
  22. AssociationInnerJoinTest();
  23. AssociationCountTest();
  24. AssociationObjectTest();
  25. MultiLevelAssociationTest();
  26. CompareAssociationTest();
  27. GroupByAssociationTest();
  28. InheritanceTest1();
  29. InheritanceTest2();
  30. StringLengthTest();
  31. StringCompareTest();
  32. MathRoundCompare1Test();
  33. MathRoundCompare2Test();
  34. MathRoundCompare3Test();
  35. SimpleSelectTest();
  36. InsertTest1();
  37. InsertTest2();
  38. MultipleInsertTest1();
  39. MultipleInsertTest2();
  40. InsertWithIdentityTest1();
  41. InsertWithIdentityTest2();
  42. UpdateTest1();
  43. UpdateTest2();
  44. UpdateTest3();
  45. SelfUpdateTest();
  46. DeleteTest1();
  47. DeleteTest2();
  48. SqlLengthTest();
  49. SqlRoundCompare1Test();
  50. SqlSelectLengthTest();
  51. SqlSelectLengthAsSqlTest();
  52. RoundToEvenTest();
  53. MethodExpressionTest();
  54. CompiledQueryTest();
  55. }
  56. static void FirstTest()
  57. {
  58. using (var db = new NorthwindDB())
  59. {
  60. var query = db.Employee;
  61. foreach (var employee in query)
  62. {
  63. Console.WriteLine("{0} {1}", employee.EmployeeID, employee.FirstName);
  64. }
  65. }
  66. }
  67. static void CountTest()
  68. {
  69. using (var db = new NorthwindDB())
  70. {
  71. int count = db.Employee.Count();
  72. Console.WriteLine(count);
  73. }
  74. }
  75. static void SingleTableTest()
  76. {
  77. using (var db = new NorthwindDB())
  78. {
  79. var query =
  80. from e in db.Employee
  81. where e.EmployeeID > 5
  82. orderby e.LastName, e.FirstName
  83. select e;
  84. foreach (var employee in query)
  85. {
  86. Console.WriteLine("{0} {1}, {2}", employee.EmployeeID, employee.LastName, employee.FirstName);
  87. }
  88. }
  89. }
  90. static void SelectManyTest()
  91. {
  92. using (var db = new NorthwindDB())
  93. {
  94. var query =
  95. from c in db.Category
  96. from p in db.Product
  97. where p.CategoryID == c.CategoryID
  98. select new
  99. {
  100. c.CategoryName,
  101. p.ProductName
  102. };
  103. foreach (var item in query)
  104. {
  105. Console.WriteLine(item);
  106. }
  107. }
  108. }
  109. static void InnerJoinTest()
  110. {
  111. using (var db = new NorthwindDB())
  112. {
  113. var query =
  114. from p in db.Product
  115. join c in db.Category on p.CategoryID equals c.CategoryID
  116. select new
  117. {
  118. c.CategoryName,
  119. p.ProductName
  120. };
  121. foreach (var item in query)
  122. {
  123. Console.WriteLine(item);
  124. }
  125. }
  126. }
  127. static void LeftJoinTest()
  128. {
  129. using (var db = new NorthwindDB())
  130. {
  131. var query =
  132. from p in db.Product
  133. join c in db.Category on p.CategoryID equals c.CategoryID into g
  134. from c in g.DefaultIfEmpty()
  135. select new
  136. {
  137. c.CategoryName,
  138. p.ProductName
  139. };
  140. foreach (var item in query)
  141. {
  142. Console.WriteLine(item);
  143. }
  144. }
  145. }
  146. static void AssociationInnerJoinTest()
  147. {
  148. using (var db = new NorthwindDB())
  149. {
  150. var query =
  151. from p in db.Product
  152. select new
  153. {
  154. p.Category.CategoryName,
  155. p.ProductName
  156. };
  157. foreach (var item in query)
  158. {
  159. Console.WriteLine(item);
  160. }
  161. }
  162. }
  163. static void AssociationCountTest()
  164. {
  165. using (var db = new NorthwindDB())
  166. {
  167. var query =
  168. from p in db.Product
  169. select new
  170. {
  171. p.OrderDetails.Count,
  172. p.ProductName
  173. };
  174. foreach (var item in query)
  175. {
  176. Console.WriteLine(item);
  177. }
  178. }
  179. }
  180. static void AssociationObjectTest()
  181. {
  182. using (var db = new NorthwindDB())
  183. {
  184. var query =
  185. from o in db.Order
  186. select new Order
  187. {
  188. OrderID = o.OrderID,
  189. Customer = o.Customer
  190. };
  191. foreach (var item in query)
  192. {
  193. Console.WriteLine(item);
  194. }
  195. }
  196. }
  197. static void MultiLevelAssociationTest()
  198. {
  199. using (var db = new NorthwindDB())
  200. {
  201. var query =
  202. from o in db.OrderDetail
  203. select new
  204. {
  205. o.Product.ProductName,
  206. o.Order.OrderID,
  207. o.Order.Employee.ReportsToEmployee.Region
  208. };
  209. foreach (var item in query)
  210. {
  211. Console.WriteLine(item);
  212. }
  213. }
  214. }
  215. static void CompareAssociationTest()
  216. {
  217. using (var db = new NorthwindDB())
  218. {
  219. var query =
  220. from o in db.Order
  221. from t in db.EmployeeTerritory
  222. where o.Employee == t.Employee
  223. select new
  224. {
  225. o.OrderID,
  226. o.EmployeeID,
  227. t.TerritoryID
  228. };
  229. foreach (var item in query)
  230. {
  231. Console.WriteLine(item);
  232. }
  233. }
  234. }
  235. static void GroupByAssociationTest()
  236. {
  237. using (var db = new NorthwindDB())
  238. {
  239. var query =
  240. from p in db.Product
  241. group p by p.Category into g
  242. where g.Count() == 12
  243. select g.Key.CategoryName;
  244. foreach (var item in query)
  245. {
  246. Console.WriteLine(item);
  247. }
  248. }
  249. }
  250. static void InheritanceTest1()
  251. {
  252. using (var db = new NorthwindDB())
  253. {
  254. var query = from p in db.DiscontinuedProduct select p;
  255. foreach (var item in query)
  256. {
  257. Console.WriteLine(item);
  258. }
  259. }
  260. }
  261. static void InheritanceTest2()
  262. {
  263. using (var db = new NorthwindDB())
  264. {
  265. var query =
  266. from p in db.Product
  267. where p is DiscontinuedProduct
  268. select p;
  269. foreach (var item in query)
  270. {
  271. Console.WriteLine(item);
  272. }
  273. }
  274. }
  275. static void StringLengthTest()
  276. {
  277. using (var db = new NorthwindDB())
  278. {
  279. var query =
  280. from c in db.Customer
  281. where c.ContactName.Length > 5
  282. select c.ContactName;
  283. foreach (var item in query)
  284. {
  285. Console.WriteLine(item);
  286. }
  287. }
  288. }
  289. static void StringCompareTest()
  290. {
  291. using (var db = new NorthwindDB())
  292. {
  293. var query =
  294. from c in db.Customer
  295. where c.ContactName.CompareTo("John") > 0
  296. select c.ContactName;
  297. foreach (var item in query)
  298. {
  299. Console.WriteLine(item);
  300. }
  301. }
  302. }
  303. static void MathRoundCompare1Test()
  304. {
  305. using (var db = new NorthwindDB())
  306. {
  307. var query =
  308. from o in db.Order
  309. where Math.Round(o.Freight.Value) >= 10
  310. select o.Freight;
  311. foreach (var item in query)
  312. {
  313. Console.WriteLine(item);
  314. }
  315. }
  316. }
  317. static void MathRoundCompare2Test()
  318. {
  319. using (var db = new NorthwindDB())
  320. {
  321. var query =
  322. from o in db.Order
  323. where Math.Round(o.OrderDetails.Sum(d => d.Quantity * d.UnitPrice)) >= 10
  324. select o.Freight;
  325. foreach (var item in query)
  326. {
  327. Console.WriteLine(item);
  328. }
  329. }
  330. }
  331. static void MathRoundCompare3Test()
  332. {
  333. using (var db = new NorthwindDB())
  334. {
  335. var query =
  336. from o in db.Order
  337. let sum = o.OrderDetails.Sum(d => d.Quantity * d.UnitPrice)
  338. where Math.Round(sum) >= 10
  339. select o.Freight;
  340. foreach (var item in query)
  341. {
  342. Console.WriteLine(item);
  343. }
  344. }
  345. }
  346. static void SimpleSelectTest()
  347. {
  348. using (var db = new NorthwindDB())
  349. {
  350. var value = db.Select(() => Sql.CurrentTimestamp);
  351. Console.WriteLine(value);
  352. }
  353. }
  354. static void InsertTest1()
  355. {
  356. using (var db = new NorthwindDB())
  357. {
  358. var value = db.Employee.Insert(() => new Employee
  359. {
  360. FirstName = "John",
  361. LastName = "Shepard",
  362. Title = "Spectre",
  363. HireDate = Sql.CurrentTimestamp
  364. });
  365. Console.WriteLine(value);
  366. db.Employee.Delete(e => e.LastName == "Shepard");
  367. }
  368. }
  369. static void InsertTest2()
  370. {
  371. using (var db = new NorthwindDB())
  372. {
  373. var value =
  374. db
  375. .Into(db.Employee)
  376. .Value(e => e.FirstName, "John")
  377. .Value(e => e.LastName, "Shepard")
  378. .Value(e => e.Title, "Spectre")
  379. .Value(e => e.HireDate, () => Sql.CurrentTimestamp)
  380. .Insert();
  381. Console.WriteLine(value);
  382. db.Employee.Delete(e => e.LastName == "Shepard");
  383. }
  384. }
  385. static void MultipleInsertTest1()
  386. {
  387. using (var db = new NorthwindDB())
  388. {
  389. var value =
  390. db.Region
  391. .Where(r => r.RegionID > 2)
  392. .Insert(db.Region, r => new Region()
  393. {
  394. RegionID = r.RegionID + 100,
  395. RegionDescription = "Copy Of " + r.RegionDescription
  396. });
  397. Console.WriteLine(value);
  398. db.Region.Delete(r => r.RegionDescription.StartsWith("Copy Of "));
  399. }
  400. }
  401. static void MultipleInsertTest2()
  402. {
  403. using (var db = new NorthwindDB())
  404. {
  405. var value =
  406. db.Region
  407. .Where(r => r.RegionID > 2)
  408. .Into(db.Region)
  409. .Value(r => r.RegionID, r => r.RegionID + 100)
  410. .Value(r => r.RegionDescription, r => "Copy Of " + r.RegionDescription)
  411. .Insert();
  412. Console.WriteLine(value);
  413. db.Region.Delete(r => r.RegionDescription.StartsWith("Copy Of "));
  414. }
  415. }
  416. static void InsertWithIdentityTest1()
  417. {
  418. using (var db = new NorthwindDB())
  419. {
  420. var value = db.Employee.InsertWithIdentity(() => new Employee
  421. {
  422. FirstName = "John",
  423. LastName = "Shepard",
  424. Title = "Spectre",
  425. HireDate = Sql.CurrentTimestamp
  426. });
  427. Console.WriteLine(value);
  428. db.Employee.Delete(e => e.EmployeeID == Convert.ToInt32(value));
  429. }
  430. }
  431. static void InsertWithIdentityTest2()
  432. {
  433. using (var db = new NorthwindDB())
  434. {
  435. var value =
  436. db
  437. .Into(db.Employee)
  438. .Value(e => e.FirstName, "John")
  439. .Value(e => e.LastName, "Shepard")
  440. .Value(e => e.Title, () => "Spectre")
  441. .Value(e => e.HireDate, () => Sql.CurrentTimestamp)
  442. .InsertWithIdentity();
  443. Console.WriteLine(value);
  444. db.Employee.Delete(e => e.EmployeeID == Convert.ToInt32(value));
  445. }
  446. }
  447. static void UpdateTest1()
  448. {
  449. using (var db = new NorthwindDB())
  450. {
  451. var value =
  452. db.Employee
  453. .Update(
  454. e => e.Title == "Spectre",
  455. e => new Employee
  456. {
  457. Title = "Commander"
  458. });
  459. Console.WriteLine(value);
  460. }
  461. }
  462. static void UpdateTest2()
  463. {
  464. using (var db = new NorthwindDB())
  465. {
  466. var value =
  467. db.Employee
  468. .Where(e => e.Title == "Spectre")
  469. .Update(e => new Employee
  470. {
  471. Title = "Commander"
  472. });
  473. Console.WriteLine(value);
  474. }
  475. }
  476. static void UpdateTest3()
  477. {
  478. using (var db = new NorthwindDB())
  479. {
  480. var value =
  481. db.Employee
  482. .Where(e => e.Title == "Spectre")
  483. .Set(e => e.Title, "Commander")
  484. .Update();
  485. Console.WriteLine(value);
  486. }
  487. }
  488. static void SelfUpdateTest()
  489. {
  490. using (var db = new NorthwindDB())
  491. {
  492. var value =
  493. db.Employee
  494. .Where(e => e.Title == "Spectre")
  495. .Set(e => e.HireDate, e => e.HireDate.Value.AddDays(10))
  496. .Update();
  497. Console.WriteLine(value);
  498. }
  499. }
  500. static void DeleteTest1()
  501. {
  502. using (var db = new NorthwindDB())
  503. {
  504. var value = db.Employee.Delete(e => e.Title == "Spectre");
  505. Console.WriteLine(value);
  506. }
  507. }
  508. static void DeleteTest2()
  509. {
  510. using (var db = new NorthwindDB())
  511. {
  512. var value =
  513. db.Employee
  514. .Where(e => e.Title == "Spectre")
  515. .Delete();
  516. Console.WriteLine(value);
  517. }
  518. }
  519. static void SqlLengthTest()
  520. {
  521. using (var db = new NorthwindDB())
  522. {
  523. var query =
  524. from c in db.Customer
  525. where Sql.Length(c.ContactName) > 5
  526. select c.ContactName;
  527. foreach (var item in query)
  528. {
  529. Console.WriteLine(item);
  530. }
  531. }
  532. }
  533. static void SqlRoundCompare1Test()
  534. {
  535. using (var db = new NorthwindDB())
  536. {
  537. var query =
  538. from o in db.Order
  539. where Sql.Round(o.Freight) >= 10
  540. select o.Freight;
  541. foreach (var item in query)
  542. {
  543. Console.WriteLine(item);
  544. }
  545. }
  546. }
  547. static void SqlSelectLengthTest()
  548. {
  549. using (var db = new NorthwindDB())
  550. {
  551. var query =
  552. from c in db.Customer
  553. select Sql.Length(c.ContactName);
  554. foreach (var item in query)
  555. {
  556. Console.WriteLine(item);
  557. }
  558. }
  559. }
  560. static void SqlSelectLengthAsSqlTest()
  561. {
  562. using (var db = new NorthwindDB())
  563. {
  564. var query =
  565. from c in db.Customer
  566. select Sql.AsSql(Sql.Length(c.ContactName));
  567. foreach (var item in query)
  568. {
  569. Console.WriteLine(item);
  570. }
  571. }
  572. }
  573. static decimal? RoundToEven(decimal? value)
  574. {
  575. return
  576. value - Sql.Floor(value) == 0.5m && Sql.Floor(value) % 2 == 0?
  577. Sql.Floor(value) :
  578. Sql.Round(value);
  579. }
  580. static void RoundToEvenTest()
  581. {
  582. Expressions.MapMember<decimal?,decimal?>(
  583. value => RoundToEven(value),
  584. value =>
  585. value - Sql.Floor(value) == 0.5m && Sql.Floor(value) % 2 == 0?
  586. Sql.Floor(value) :
  587. Sql.Round(value));
  588. using (var db = new NorthwindDB())
  589. {
  590. var query =
  591. from o in db.Order
  592. let sum = o.OrderDetails.Sum(d => d.Quantity * d.UnitPrice)
  593. where RoundToEven(sum) >= 10
  594. select o.Freight;
  595. foreach (var item in query)
  596. {
  597. Console.WriteLine(item);
  598. }
  599. }
  600. }
  601. [MethodExpression("OrderCountExpression")]
  602. static int OrderCount(Customer customer, string region)
  603. {
  604. throw new InvalidOperationException();
  605. }
  606. static Expression<Func<Customer,string,int>> OrderCountExpression()
  607. {
  608. return (customer, region) => customer.Orders.Count(o => o.ShipRegion == region);
  609. }
  610. static void MethodExpressionTest()
  611. {
  612. using (var db = new NorthwindDB())
  613. {
  614. var query =
  615. from c in db.Customer
  616. select new
  617. {
  618. sum1 = OrderCount(c, "SP"),
  619. sum2 = OrderCount(c, "NM")
  620. };
  621. foreach (var item in query)
  622. {
  623. Console.WriteLine(item);
  624. }
  625. }
  626. }
  627. static Func<NorthwindDB,int,IEnumerable<Employee>> _query =
  628. CompiledQuery.Compile<NorthwindDB,int,IEnumerable<Employee>>((db, n) =>
  629. from e in db.Employee
  630. where e.EmployeeID > n
  631. orderby e.LastName, e.FirstName
  632. select e
  633. );
  634. static void CompiledQueryTest()
  635. {
  636. using (var db = new NorthwindDB())
  637. {
  638. var query = _query(db, 5);
  639. foreach (var item in query)
  640. {
  641. Console.WriteLine(item);
  642. }
  643. }
  644. }
  645. }
  646. }