示例#1
0
        /// <summary>对指定字段使用实体缓存</summary>
        /// <param name="field"></param>
        public FieldCache(FieldItem field)
        {
            WaitFirst      = false;
            Expire         = 10 * 60;
            FillListMethod = () =>
            {
                return(Entity <TEntity> .FindAll(_field.GroupBy(), _Unique.Desc(), _Unique.Count()& _field, 0, MaxRows));
            };

            _field = field;
            {
                var tb = field.Table;
                var id = tb.Identity;
                if (id == null && tb.PrimaryKeys != null && tb.PrimaryKeys.Length == 1)
                {
                    id = tb.PrimaryKeys[0];
                }

                if (id == null)
                {
                    throw new Exception("{0}缺少唯一主键,无法使用缓存".F(tb.TableName));
                }

                _Unique = id;
            }
        }
示例#2
0
        public static EntityList <Online> GetList(Int32 forumid = 0, String order = null, Boolean isdesc = false, Int32 start = 0, Int32 max = 200)
        {
            if (Meta.Count < CacheCount)
            {
                var list = Online.FindAllWithCache().Clone();
                if (forumid > 0)
                {
                    list = list.FindAll(__.ForumID, forumid);
                }
                // 如果隐藏游客
                if (GeneralConfigInfo.Current.WhosOnlineContract)
                {
                    list = list.FindAll(e => e.UserID > 0);
                }

                // 排序
                if (!String.IsNullOrEmpty(order))
                {
                    FieldItem fi = Meta.Table.FindByName(order);
                    if (fi != null)
                    {
                        list = list.Sort(fi.Name, isdesc);
                    }
                }

                return(list.Page(start, max));
            }
            else
            {
                // 最多返回1000行
                var exp = new WhereExpression();
                if (forumid > 0)
                {
                    exp &= _.ForumID == forumid;
                }
                if (GeneralConfigInfo.Current.WhosOnlineContract)
                {
                    exp &= _.UserID > 0;
                }

                // 排序
                ConcatExpression dexp = null;
                if (!String.IsNullOrEmpty(order))
                {
                    FieldItem fi = Meta.Table.FindByName(order);
                    if (fi != null)
                    {
                        if (isdesc)
                        {
                            dexp = fi.Desc();
                        }
                        else
                        {
                            dexp = fi.Asc();
                        }
                    }
                }

                return(FindAll(null, dexp, null, start, max));
            }
        }