code_junkie

Entity Framework, building query based on criteria

Nov 12th, 2011
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 KB | None | 0 0
  1. namespace Falcon.Business.Repositories
  2. {
  3. using System;
  4. using System.Data.Objects;
  5. using System.Linq;
  6. using Falcon.Business.Criteria;
  7. using Falcon.Business.Entities;
  8. using Falcon.Business.Enums;
  9. using Falcon.Business.Extensions;
  10. using Falcon.Business.Repositories.Interfaces;
  11. using Falcon.Business.Services;
  12. using Falcon.Business.Services.Interfaces;
  13. using Falcon.Core.Extensions;
  14.  
  15. public class MemberRepository : LinqRepository<Member>, IMemberRepository
  16. {
  17. public Member Fetch(MemberCriteria criteria)
  18. {
  19. ObjectQuery<Member> query = base.CreateQuery();
  20.  
  21. query = this.AddRelations(query);
  22. query = this.AddCriteria(query, criteria);
  23. query = this.AddCriteriaOrder(query, criteria);
  24.  
  25. return query.FirstOrDefault();
  26. }
  27.  
  28. public IPagerService<Member> FetchAll(MemberCriteria criteria)
  29. {
  30. int page = (criteria.Page.HasValue) ? criteria.Page.Value : 1;
  31. int limit = criteria.Limit;
  32. int start = (page * limit) - limit;
  33. int total = this.Count(criteria);
  34.  
  35. ObjectQuery<Member> query = base.CreateQuery();
  36.  
  37. query = this.AddRelations(query);
  38. query = this.AddCriteria(query, criteria);
  39. query = this.AddCriteriaOrder(query, criteria);
  40.  
  41. return new PagerService<Member>(query.Skip(start).Take(limit).ToList(), page, limit, total);
  42. }
  43.  
  44. public int Count(MemberCriteria criteria)
  45. {
  46. ObjectQuery<Member> query = base.CreateQuery();
  47.  
  48. query = this.AddCriteria(query, criteria);
  49.  
  50. return query.Count();
  51. }
  52.  
  53. public ObjectQuery<Member> AddCriteria(IQueryable<Member> query, MemberCriteria criteria)
  54. {
  55. if (criteria.Title.HasValue())
  56. {
  57. query = query.Where(q => q.Title == criteria.Title);
  58. }
  59.  
  60. if (criteria.TitleUrl.HasValue())
  61. {
  62. query = query.Where(q => q.TitleUrl == criteria.TitleUrl);
  63. }
  64.  
  65. if (criteria.EmailAddress.HasValue())
  66. {
  67. query = query.Where(q => q.EmailAddress == criteria.EmailAddress);
  68. }
  69.  
  70. if (criteria.HostAddress.HasValue())
  71. {
  72. query = query.Where(q => q.HostAddress == criteria.HostAddress);
  73. }
  74.  
  75. query = query.Where(q => q.Status == criteria.Status);
  76.  
  77. return query as ObjectQuery<Member>;
  78. }
  79.  
  80. public ObjectQuery<Member> AddCriteriaOrder(IQueryable<Member> query, MemberCriteria criteria)
  81. {
  82. if (criteria.Sort == SortMember.ID)
  83. {
  84. query = criteria.Order == SortOrder.Asc
  85. ? query.OrderBy(q => q.ID)
  86. : query.OrderByDescending(q => q.ID);
  87. }
  88. else if (criteria.Sort == SortMember.Posts)
  89. {
  90. query = criteria.Order == SortOrder.Asc
  91. ? query.OrderBy(q => q.Posts)
  92. : query.OrderByDescending(q => q.Posts);
  93. }
  94. else if (criteria.Sort == SortMember.Title)
  95. {
  96. query = criteria.Order == SortOrder.Asc
  97. ? query.OrderBy(q => q.Title)
  98. : query.OrderByDescending(q => q.Title);
  99. }
  100. else if (criteria.Sort == SortMember.LastLogin)
  101. {
  102. query = criteria.Order == SortOrder.Asc
  103. ? query.OrderBy(q => q.LastLogin)
  104. : query.OrderByDescending(q => q.LastLogin);
  105. }
  106. else if (criteria.Sort == SortMember.LastVisit)
  107. {
  108. query = criteria.Order == SortOrder.Asc
  109. ? query.OrderBy(q => q.LastVisit)
  110. : query.OrderByDescending(q => q.LastVisit);
  111. }
  112. else
  113. {
  114. query = criteria.Order == SortOrder.Asc
  115. ? query.OrderBy(q => q.Created)
  116. : query.OrderByDescending(q => q.Created);
  117. }
  118.  
  119. return query as ObjectQuery<Member>;
  120. }
  121.  
  122. private ObjectQuery<Member> AddRelations(ObjectQuery<Member> query)
  123. {
  124. query = query.Include(x => x.Country);
  125. query = query.Include(x => x.TimeZone);
  126. query = query.Include(x => x.Profile);
  127.  
  128. return query;
  129. }
  130. }
  131. }
Add Comment
Please, Sign In to add comment