private List <T> ToList(IOpenQuery <T> query) { Func <T, bool> predicate; if (query.WhereExpression == null) { predicate = new Func <T, bool>(m => { return(true); }); } else { predicate = this.GetFilter(query.WhereExpression); } var q = this.GetData().AsEnumerable().Where(predicate); var order = query.OrderExpression; while (order != null) { if (order.Descending) { Func <T, string> keySelector = new Func <T, string>((target) => { return(order.FieldName); }); q = q.OrderByDescending(keySelector); } else { Func <T, string> keySelector = new Func <T, string>((target) => { return(order.FieldName); }); q.OrderBy(keySelector); } order = order.Expression; } return(q.ToList()); }
private List <T> ToList(IOpenQuery <T> query) { StringBuilder sb = new StringBuilder(); sb.AppendLine("SELECT"); if (query.SelectExpression == null || query.SelectExpression.Fields.Length < 1) { sb.AppendLine("*"); } else { sb.AppendLine(string.Join(",", query.SelectExpression.Fields)); } sb.AppendLine(string.Format("From [{0}]", this.entityName)); sb.AppendLine("Where 1=1"); var where = this.GetFilter(query.WhereExpression); if (!string.IsNullOrEmpty(where)) { sb.AppendLine("and " + where); } sb.AppendLine("order by ID"); var order = query.OrderExpression; while (order != null) { if (order.Descending) { sb.AppendLine(string.Format(",{0} desc", order.FieldName)); } else { sb.AppendLine(string.Format(",{0}", order.FieldName)); } order = order.Expression; } List <T> list = new List <T>(); using (var reader = SqlHelper.ExecuteReader(this.connectionString, CommandType.Text, sb.ToString())) { while (reader.Read()) { var entity = new T(); foreach (var item in this.schema.AllColumns) { entity.TrySetValue(item.Name, reader[item.Name]); } list.Add(entity); } } return(list); }
public object Execute(IOpenQuery <T> query) { switch (query.CallExpression.CallType) { case CallType.Count: return(Count(query)); case CallType.First: return(First(query)); case CallType.Last: return(Last(query)); case CallType.ToList: return(ToList(query)); case CallType.PageList: return(PageList(query)); default: return(null); } }
public object Execute(IOpenQuery <T> query) { throw new NotImplementedException(); }
private int Count(IOpenQuery <T> query) { return(this.ToList(query).Count); }
private T First(IOpenQuery <T> query) { return(this.ToList(query).FirstOrDefault()); }
private T Last(IOpenQuery <T> query) { return(this.ToList(query).Last()); }
private PagedList <T> PageList(IOpenQuery <T> query) { var list = this.ToList(query); return(new PagedList <T>(list, query.TakeExpression.Skip / query.TakeExpression.Take + 1, query.TakeExpression.Take, list.Count)); }