Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Expression<Func<EmailAflAwmMessageDM, bool>> SearchXpr(string param, string q)
- {
- if (param == "to")
- return e => e.to_msg.Contains(q);
- else if (param == "from")
- return e => e.from_msg.Contains(q);
- else if (param == "cc")
- return e => e.cc_msg.Contains(q);
- else if (param == "bcc")
- return e => e.bcc_msg.Contains(q);
- else if (param == "subject")
- return e => e.subject.Contains(q);
- else
- return e => e.body_text.Contains(q);
- }
- public Expression<Func<EmailAflAwmMessageDM, bool>> FiltertXpr(string filter, string value)
- {
- if (filter == "attachments")
- return e => e.attachments == value;
- else if (filter == "flagged")
- return e => e.flagged == value;
- else
- return e => e.seen == value;
- }
- private IQueryable SearchFilter(string param,string q,string filter,
- string value,string sort,string dir)
- {
- var searchXpr = SearchXpr(param, q);
- var filterXpr = FiltertXpr(filter, value);
- var emailmessage =
- db.EmailAflAwmMessage.
- Where(filterXpr).Where(searchXpr)
- .OrderByDescending(a => a.msg_date).Select(a =>
- new
- {
- a.subject,
- a.msg_date,
- });
- return emailmessage;
- }
- public static class ExpressionBuilder
- {
- private static readonly MethodInfo ToStringMethod = typeof(object).GetMethod("ToString");
- private static readonly MethodInfo StringContainsMethod = typeof(string).GetMethod("Contains");
- public static Func<T, object> Selector<T>(string prop)
- {
- var type = typeof(T);
- var param = Expression.Parameter(type);
- return Expression.Lambda<Func<T, object>>(Expression.Property(param, type.GetProperty(prop)), param).Compile();
- }
- public static Expression<Func<T, bool>> BuildFilterPredicate<T>(string q)
- {
- var query = Expression.Constant(q);
- var type = typeof(T);
- var lbdSelector = Expression.Parameter(type);
- var predicates = type.GetProperties().SelectMany(p => PredicateContainsBuilder(lbdSelector, p, query)).ToList();
- Expression body = predicates[0];
- body = predicates.Skip(1).Aggregate(body, Expression.OrElse);
- return Expression.Lambda<Func<T, bool>>(body, lbdSelector);
- }
- private static IEnumerable<MethodCallExpression> PredicateContainsBuilder(Expression lbdSelector, PropertyInfo prop, Expression query)
- {
- if (prop.PropertyType.IsClass)
- return new List<MethodCallExpression> { Expression.Call(Expression.Call(Expression.Property(lbdSelector, prop), ToStringMethod), StringContainsMethod, query) };
- var properties = prop.PropertyType.GetProperties();
- return properties.Select(p => Expression.Call(Expression.Call(Expression.Property(lbdSelector, p), ToStringMethod), StringContainsMethod, query)).ToList();
- }
- }
- private IQueryable SearchFilter(string param,string q,string filter,string value,string sort,string dir)
- {
- var emailMessage = db.EmailAflAwmMessage
- .Where(ExpressionBuilder.BuildFilterPredicate<EmailMessage>(q))
- .OrderBy(ExpressionBuilder.Selector<EmailMessage>(sort))
- .Select(m=> new{m.subject,m.msg_date});
- return emailmessage;
- }
- private IQueryable SortXpr(IQueryable<EmailAflAwmMessageDM> email ,string sort,string dir) {
- if (sort.Contains("to"))
- {
- if (dir.Contains("asc"))
- {
- return email.OrderBy(e => e.to_msg);
- }
- else
- {
- return email.OrderByDescending(e => e.to_msg);
- }
- }
- else if (sort.Contains("from"))
- {
- if (dir.Contains("asc"))
- {
- return email.OrderBy(e => e.from_msg);
- }
- else
- {
- return email.OrderByDescending(e => e.from_msg);
- }
- }
- else if (sort.Contains("subject"))
- {
- if (dir.Contains("asc"))
- {
- return email.OrderBy(e => e.subject);
- }
- else
- {
- return email.OrderByDescending(e => e.subject);
- }
- }
- else
- {
- if (dir.Contains("asc"))
- {
- return email.OrderBy(e => e.msg_date);
- }
- else
- {
- return email.OrderByDescending(e => e.msg_date);
- }
- }
- }
- private Expression<Func<EmailAflAwmMessageDM, bool>> FiltertXpr(string filter, string value)
- {
- if (filter == "attachments")
- return e => e.attachments == value;
- else if (filter == "flagged")
- return e => e.flagged == value;
- else
- return e => e.seen == value;
- }
- private Expression<Func<EmailAflAwmMessageDM, bool>> SearchXpr(string param, string q)
- {
- if (param == "to")
- return e => e.to_msg.Contains(q);
- else if (param == "from")
- return e => e.from_msg.Contains(q);
- else if (param == "cc")
- return e => e.cc_msg.Contains(q);
- else if (param == "bcc")
- return e => e.bcc_msg.Contains(q);
- else if (param == "subject")
- return e => e.subject.Contains(q);
- else
- return e => e.body_text.Contains(q);
- }
- private IQueryable SearchFilterCondition(string param,string q
- ,string filter,string value,string sort,string dir)
- {
- var searchXpr = SearchXpr(param, q);
- var filterXpr = FiltertXpr(filter, value);
- IQueryable<EmailAflAwmMessageDM>
- EmailAflAwmMessagejc = db.EmailAflAwmMessage.Where(filterXpr).Where(searchXpr);
- return SortXpr(EmailAflAwmMessagejc, sort, dir);
- }
Add Comment
Please, Sign In to add comment