示例#1
0
        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());
        }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
 public object Execute(IOpenQuery <T> query)
 {
     throw new NotImplementedException();
 }
示例#5
0
 private int Count(IOpenQuery <T> query)
 {
     return(this.ToList(query).Count);
 }
示例#6
0
 private T First(IOpenQuery <T> query)
 {
     return(this.ToList(query).FirstOrDefault());
 }
示例#7
0
 private T Last(IOpenQuery <T> query)
 {
     return(this.ToList(query).Last());
 }
示例#8
0
        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));
        }