コード例 #1
0
ファイル: GuffController.cs プロジェクト: netnr/blog
        public SharedResultVM ReplyList(string id, int page = 1)
        {
            return(SharedResultVM.Try(vm =>
            {
                var uinfo = Apps.LoginService.Get(HttpContext);

                var pag = new SharedPaginationVM
                {
                    PageNumber = Math.Max(page, 1),
                    PageSize = 10
                };

                var list = Application.CommonService.ReplyOneQuery(Application.EnumService.ReplyType.GuffRecord, id, pag);
                //匿名用户,生成邮箱MD5加密用于请求头像
                foreach (var item in list)
                {
                    if (item.Uid == 0 && !string.IsNullOrWhiteSpace(item.UrAnonymousMail))
                    {
                        item.Spare3 = CalcTo.MD5(item.UrAnonymousMail);
                    }
                }

                var pvm = new SharedPageVM()
                {
                    Rows = list,
                    Pag = pag
                };
                vm.Data = pvm;

                vm.Set(SharedEnum.RTag.success);

                return vm;
            }));
        }
コード例 #2
0
        /// <summary>
        /// 获取消息
        /// </summary>
        /// <param name="UserId">用户ID</param>
        /// <param name="messageType">消息分类</param>
        /// <param name="action">消息动作</param>
        /// <param name="page"></param>
        /// <returns></returns>
        public static SharedPageVM MessageQuery(int UserId, EnumService.MessageType?messageType, int?action, int page = 1)
        {
            using var db = ContextBaseFactory.CreateDbContext();
            var query = from a in db.UserMessage
                        join b in db.UserInfo on a.UmTriggerUid equals b.UserId into bg
                        from b1 in bg.DefaultIfEmpty()
                        orderby a.UmCreateTime descending
                        where a.Uid == UserId
                        select new
            {
                a,
                Nickname  = b1 == null ? null : b1.Nickname,
                UserPhoto = b1 == null ? null : b1.UserPhoto
            };

            if (messageType.HasValue)
            {
                query = query.Where(x => x.a.UmType == messageType.ToString());
            }
            if (action.HasValue)
            {
                query = query.Where(x => x.a.UmAction == action);
            }

            var pag = new SharedPaginationVM
            {
                PageNumber = Math.Max(page, 1),
                PageSize   = 10
            };

            pag.Total = query.Count();
            var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList();

            if (list.Count > 0)
            {
                //分类:根据ID查询对应的标题
                var listUwId = list.Where(x => x.a.UmType == EnumService.MessageType.UserWriting.ToString()).Select(x => Convert.ToInt32(x.a.UmTargetId)).ToList();
                var listUw   = db.UserWriting.Where(x => listUwId.Contains(x.UwId)).Select(x => new { x.UwId, x.UwTitle }).ToList();

                foreach (var item in list)
                {
                    item.a.Spare1 = item.Nickname;
                    item.a.Spare2 = item.UserPhoto;
                    item.a.Spare3 = listUw.FirstOrDefault(x => x.UwId.ToString() == item.a.UmTargetId)?.UwTitle;
                }
            }

            var data = list.Select(x => x.a).ToList();

            SharedPageVM pageSet = new()
            {
                Rows = data,
                Pag  = pag
            };

            return(pageSet);
        }
コード例 #3
0
        public IActionResult List(int page = 1)
        {
            if (int.TryParse(RouteData.Values["Id"]?.ToString(), out int wid))
            {
                var uwo = Application.CommonService.UserWritingOneQuery(wid);
                if (uwo == null)
                {
                    return(Redirect("/"));
                }

                var pag = new SharedPaginationVM
                {
                    PageNumber = Math.Max(page, 1),
                    PageSize   = 10
                };

                var vm = new SharedPageVM()
                {
                    Rows  = Application.CommonService.ReplyOneQuery(Application.EnumService.ReplyType.UserWriting, wid.ToString(), pag),
                    Pag   = pag,
                    Temp  = uwo,
                    Route = "/home/list/" + wid.ToString()
                };


                if (User.Identity.IsAuthenticated)
                {
                    var uinfo  = Apps.LoginService.Get(HttpContext);
                    var listuc = db.UserConnection.Where(x => x.Uid == uinfo.UserId && x.UconnTargetType == Application.EnumService.ConnectionType.UserWriting.ToString() && x.UconnTargetId == wid.ToString()).ToList();

                    ViewData["uca1"] = listuc.Any(x => x.UconnAction == 1) ? "yes" : "";
                    ViewData["uca2"] = listuc.Any(x => x.UconnAction == 2) ? "yes" : "";
                }

                return(View(vm));
            }
            else
            {
                return(Redirect("/"));
            }
        }
コード例 #4
0
        /// <summary>
        /// Guff查询
        /// </summary>
        /// <param name="category">类别,可选,支持 text、image、audio、video、me(我的)、melaud(我点赞的)、mereply(我回复的)</param>
        /// <param name="q">搜索</param>
        /// <param name="nv">分类名/分类值</param>
        /// <param name="tag">标签</param>
        /// <param name="obj">对象</param>
        /// <param name="OwnerId">所属用户</param>
        /// <param name="UserId">登录用户</param>
        /// <param name="page">页码</param>
        /// <returns></returns>
        public static SharedPageVM GuffQuery(string category, string q, string nv, string tag, string obj, int OwnerId, int UserId, int page = 1)
        {
            var ctype = EnumService.ConnectionType.GuffRecord.ToString();

            using var db = ContextBaseFactory.CreateDbContext();

            IQueryable <GuffRecord> query = null;

            switch (category?.ToLower())
            {
            case "melaud":
            {
                query = from c in db.UserConnection
                        join a in db.GuffRecord on c.UconnTargetId equals a.GrId
                        join b in db.UserInfo on a.Uid equals b.UserId
                        where c.Uid == UserId && c.UconnTargetType == ctype && c.UconnAction == 1 && a.GrStatus == 1
                        orderby c.UconnCreateTime descending
                        select new GuffRecord
                {
                    GrId         = a.GrId,
                    GrTypeName   = a.GrTypeName,
                    GrTypeValue  = a.GrTypeValue,
                    GrObject     = a.GrObject,
                    GrContent    = a.GrContent,
                    GrContentMd  = a.GrContentMd,
                    GrImage      = a.GrImage,
                    GrAudio      = a.GrAudio,
                    GrVideo      = a.GrVideo,
                    GrFile       = a.GrFile,
                    GrRemark     = a.GrRemark,
                    GrTag        = a.GrTag,
                    GrCreateTime = a.GrCreateTime,
                    GrUpdateTime = a.GrUpdateTime,
                    GrOpen       = a.GrOpen,
                    GrReadNum    = a.GrReadNum,
                    GrReplyNum   = a.GrReplyNum,
                    GrLaud       = a.GrLaud,
                    GrMark       = a.GrMark,

                    Uid = a.Uid,

                    //已点赞
                    Spare1 = "laud",
                    //是我的
                    Spare2 = a.Uid == UserId ? "owner" : "",
                    //昵称
                    Spare3 = b.Nickname
                };
            }
            break;

            case "mereply":
            {
                query = from c in db.UserReply
                        join a in db.GuffRecord on c.UrTargetId equals a.GrId
                        join b in db.UserInfo on a.Uid equals b.UserId
                        where c.Uid == UserId && c.UrTargetType == ctype && a.GrStatus == 1
                        orderby c.UrCreateTime descending
                        select new GuffRecord
                {
                    GrId         = a.GrId,
                    GrTypeName   = a.GrTypeName,
                    GrTypeValue  = a.GrTypeValue,
                    GrObject     = a.GrObject,
                    GrContent    = a.GrContent,
                    GrContentMd  = a.GrContentMd,
                    GrImage      = a.GrImage,
                    GrAudio      = a.GrAudio,
                    GrVideo      = a.GrVideo,
                    GrFile       = a.GrFile,
                    GrRemark     = a.GrRemark,
                    GrTag        = a.GrTag,
                    GrCreateTime = a.GrCreateTime,
                    GrUpdateTime = a.GrUpdateTime,
                    GrOpen       = a.GrOpen,
                    GrReadNum    = a.GrReadNum,
                    GrReplyNum   = a.GrReplyNum,
                    GrLaud       = a.GrLaud,
                    GrMark       = a.GrMark,

                    Uid = a.Uid,

                    Spare2 = a.Uid == UserId ? "owner" : "",
                    Spare3 = b.Nickname
                };
            }
            break;

            case "me":
            case "top":
            case "text":
            case "image":
            case "audio":
            case "video":
            default:
            {
                query = from a in db.GuffRecord
                        join b in db.UserInfo on a.Uid equals b.UserId
                        where a.GrStatus == 1
                        select new GuffRecord
                {
                    GrId         = a.GrId,
                    GrTypeName   = a.GrTypeName,
                    GrTypeValue  = a.GrTypeValue,
                    GrObject     = a.GrObject,
                    GrContent    = a.GrContent,
                    GrContentMd  = a.GrContentMd,
                    GrImage      = a.GrImage,
                    GrAudio      = a.GrAudio,
                    GrVideo      = a.GrVideo,
                    GrFile       = a.GrFile,
                    GrRemark     = a.GrRemark,
                    GrTag        = a.GrTag,
                    GrCreateTime = a.GrCreateTime,
                    GrUpdateTime = a.GrUpdateTime,
                    GrOpen       = a.GrOpen,
                    GrReadNum    = a.GrReadNum,
                    GrReplyNum   = a.GrReplyNum,
                    GrLaud       = a.GrLaud,
                    GrMark       = a.GrMark,

                    Uid = a.Uid,

                    Spare2 = a.Uid == UserId ? "owner" : "",
                    Spare3 = b.Nickname
                };
            }
            break;
            }

            query = (category?.ToLower()) switch
            {
                "top" => query.OrderByDescending(x => x.GrLaud),
                "text" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrContent) && string.IsNullOrEmpty(x.GrImage) && string.IsNullOrEmpty(x.GrAudio) && string.IsNullOrEmpty(x.GrVideo)),
                "image" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrImage)),
                "audio" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrAudio)),
                "video" => query.OrderByDescending(x => x.GrCreateTime).Where(x => !string.IsNullOrEmpty(x.GrVideo)),
                _ => query.OrderByDescending(x => x.GrCreateTime),
            };

            //所属用户
            if (OwnerId != 0)
            {
                query = query.Where(x => x.Uid == OwnerId);
            }

            //未登录
            if (UserId == 0)
            {
                query = query.Where(x => x.GrOpen == 1);
            }
            else
            {
                //已登录:公开&登录用户的所有
                query = query.Where(x => x.GrOpen == 1 || x.Uid == UserId);
            }

            //分类名/分类值
            if (!string.IsNullOrWhiteSpace(nv))
            {
                if (!nv.Contains('/'))
                {
                    nv += "/";
                }

                var nvs = nv.Split('/').ToList();
                var n   = nvs.FirstOrDefault();
                var v   = nvs.LastOrDefault();

                //分类名
                if (!string.IsNullOrWhiteSpace(n))
                {
                    query = query.Where(x => x.GrTypeName == n);
                }

                //分类值
                if (!string.IsNullOrWhiteSpace(v))
                {
                    query = query.Where(x => x.GrTypeValue == v);
                }
            }

            //标签
            if (!string.IsNullOrWhiteSpace(tag))
            {
                query = query.Where(x => x.GrTag.Contains(tag));
            }

            //标签
            if (!string.IsNullOrWhiteSpace(tag))
            {
                query = query.Where(x => x.GrTag.Contains(tag));
            }

            //对象
            if (!string.IsNullOrWhiteSpace(obj))
            {
                query = query.Where(x => x.GrObject.Contains(obj));
            }

            if (!string.IsNullOrWhiteSpace(q))
            {
                query = GlobalTo.TDB switch
                {
                    SharedEnum.TypeDB.SQLite => query.Where(x => EF.Functions.Like(x.GrContent, $"%{q}%") || EF.Functions.Like(x.GrTag, $"%{q}%")),
                    SharedEnum.TypeDB.PostgreSQL => query.Where(x => EF.Functions.ILike(x.GrContent, $"%{q}%") || EF.Functions.ILike(x.GrTag, $"%{q}%")),
                    _ => query.Where(x => x.GrContent.Contains(q) || x.GrTag.Contains(q)),
                };
            }

            var pag = new SharedPaginationVM
            {
                PageNumber = Math.Max(page, 1),
                PageSize   = 18
            };

            var dicQs = new Dictionary <string, string> {
                { "q", q }
            };

            pag.Total = query.Count();
            var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList();

            var listid = list.Select(x => x.GrId).ToList();

            //点赞查询
            if (category != "melaud")
            {
                var listtid = db.UserConnection.Where(x => listid.Contains(x.UconnTargetId) && x.Uid == UserId && x.UconnTargetType == ctype && x.UconnAction == 1).Select(x => x.UconnTargetId).ToList();
                foreach (var item in list)
                {
                    if (listtid.Contains(item.GrId))
                    {
                        item.Spare1 = "laud";
                    }
                }
            }

            //查询记录
            var ormo = new OperationRecord()
            {
                OrId         = UniqueTo.LongId().ToString(),
                OrType       = ctype,
                OrAction     = "query",
                OrSource     = string.Join(",", listid),
                OrCreateTime = DateTime.Now,
                OrMark       = "default"
            };

            db.OperationRecord.Add(ormo);
            db.SaveChanges();

            SharedPageVM pageSet = new()
            {
                Rows        = list,
                Pag         = pag,
                QueryString = dicQs
            };

            return(pageSet);
        }
    }
コード例 #5
0
        /// <summary>
        /// Draw查询
        /// </summary>
        /// <param name="q">搜索</param>
        /// <param name="OwnerId">所属用户</param>
        /// <param name="UserId">登录用户</param>
        /// <param name="page">页码</param>
        /// <returns></returns>
        public static SharedPageVM DrawQuery(string q, int OwnerId = 0, int UserId = 0, int page = 1)
        {
            using var db = ContextBaseFactory.CreateDbContext();
            var query = from a in db.Draw
                        join b in db.UserInfo on a.Uid equals b.UserId
                        where a.DrStatus == 1
                        orderby a.DrCreateTime descending
                        select new Draw
            {
                DrId         = a.DrId,
                Uid          = a.Uid,
                DrType       = a.DrType,
                DrName       = a.DrName,
                DrRemark     = a.DrRemark,
                DrCategory   = a.DrCategory,
                DrOrder      = a.DrOrder,
                DrCreateTime = a.DrCreateTime,
                DrStatus     = a.DrStatus,
                DrOpen       = a.DrOpen,
                Spare1       = a.Spare1,

                Spare3 = b.Nickname
            };

            //所属用户
            if (OwnerId != 0)
            {
                query = query.Where(x => x.Uid == OwnerId);
            }

            //未登录
            if (UserId == 0)
            {
                query = query.Where(x => x.DrOpen == 1);
            }
            else
            {
                //已登录:公开&登录用户的所有
                query = query.Where(x => x.DrOpen == 1 || x.Uid == UserId);
            }

            if (!string.IsNullOrWhiteSpace(q))
            {
                query = GlobalTo.TDB switch
                {
                    SharedEnum.TypeDB.SQLite => query.Where(x => EF.Functions.Like(x.DrName, $"%{q}%") || EF.Functions.Like(x.DrRemark, $"%{q}%")),
                    SharedEnum.TypeDB.PostgreSQL => query.Where(x => EF.Functions.ILike(x.DrName, $"%{q}%") || EF.Functions.ILike(x.DrRemark, $"%{q}%")),
                    _ => query.Where(x => x.DrName.Contains(q) || x.DrRemark.Contains(q)),
                };
            }

            var pag = new SharedPaginationVM
            {
                PageNumber = Math.Max(page, 1),
                PageSize   = 20
            };

            var dicQs = new Dictionary <string, string> {
                { "q", q }
            };

            pag.Total = query.Count();
            var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList();

            SharedPageVM pageSet = new()
            {
                Rows        = list,
                Pag         = pag,
                QueryString = dicQs
            };

            return(pageSet);
        }
コード例 #6
0
        /// <summary>
        /// Gist查询,按列权重排序
        /// </summary>
        /// <param name="q">搜索</param>
        /// <param name="lang">语言</param>
        /// <param name="OwnerId">所属用户</param>
        /// <param name="UserId">登录用户</param>
        /// <param name="page">页码</param>
        /// <returns></returns>
        public static SharedPageVM GistQuery(string q, string lang, int OwnerId = 0, int UserId = 0, int page = 1)
        {
            using var db = ContextBaseFactory.CreateDbContext();
            var query1 = from a in db.Gist
                         join b in db.UserInfo on a.Uid equals b.UserId
                         where a.GistStatus == 1
                         orderby a.GistCreateTime descending
                         select new
            {
                a,
                b.Nickname
            };

            if (!string.IsNullOrWhiteSpace(lang))
            {
                query1 = query1.Where(x => x.a.GistLanguage == lang);
            }

            if (!string.IsNullOrWhiteSpace(q))
            {
                query1 = GlobalTo.TDB switch
                {
                    SharedEnum.TypeDB.SQLite => query1.Where(x => EF.Functions.Like(x.a.GistFilename, $"%{q}%") || EF.Functions.Like(x.a.GistRemark, $"%{q}%") || EF.Functions.Like(x.a.GistContent, $"%{q}%")),
                    SharedEnum.TypeDB.PostgreSQL => query1.Where(x => EF.Functions.ILike(x.a.GistFilename, $"%{q}%") || EF.Functions.ILike(x.a.GistRemark, $"%{q}%") || EF.Functions.ILike(x.a.GistContent, $"%{q}%")),
                    _ => query1.Where(x => x.a.GistFilename.Contains(q) || x.a.GistRemark.Contains(q) || x.a.GistContent.Contains(q)),
                };
            }

            //所属用户
            if (OwnerId != 0)
            {
                query1 = query1.Where(x => x.a.Uid == OwnerId);
            }

            //未登录
            if (UserId == 0)
            {
                query1 = query1.Where(x => x.a.GistOpen == 1);
            }
            else
            {
                //已登录:公开&登录用户的所有
                query1 = query1.Where(x => x.a.GistOpen == 1 || x.a.Uid == UserId);
            }

            IQueryable <Gist> query = null;

            //搜索
            if (!string.IsNullOrWhiteSpace(q))
            {
                var query2 = query1.Select(x => new
                {
                    SearchOrder = (x.a.GistFilename.Contains(q) ? 4 : 0) + (x.a.GistRemark.Contains(q) ? 2 : 0) + (x.a.GistContent.Contains(q) ? 1 : 0),
                    x.Nickname,
                    x.a
                }).OrderByDescending(x => x.SearchOrder);

                switch (GlobalTo.TDB)
                {
                case SharedEnum.TypeDB.SQLite:
                    query2 = query1.Select(x => new
                    {
                        SearchOrder = (EF.Functions.Like(x.a.GistFilename, $"%{q}%") ? 4 : 0) + (EF.Functions.Like(x.a.GistRemark, $"%{q}%") ? 2 : 0) + (EF.Functions.Like(x.a.GistContent, $"%{q}%") ? 1 : 0),
                        x.Nickname,
                        x.a
                    }).OrderByDescending(x => x.SearchOrder);
                    break;

                case SharedEnum.TypeDB.PostgreSQL:
                    query2 = query1.Select(x => new
                    {
                        SearchOrder = (EF.Functions.Like(x.a.GistFilename, $"%{q}%") ? 4 : 0) + (EF.Functions.Like(x.a.GistRemark, $"%{q}%") ? 2 : 0) + (EF.Functions.Like(x.a.GistContent, $"%{q}%") ? 1 : 0),
                        x.Nickname,
                        x.a
                    }).OrderByDescending(x => x.SearchOrder);
                    break;
                }

                query = query2.Select(x => new Gist
                {
                    GistCode           = x.a.GistCode,
                    GistContentPreview = x.a.GistContentPreview,
                    GistCreateTime     = x.a.GistCreateTime,
                    GistFilename       = x.a.GistFilename,
                    GistId             = x.a.GistId,
                    GistLanguage       = x.a.GistLanguage,
                    GistRemark         = x.a.GistRemark,
                    GistRow            = x.a.GistRow,
                    GistTags           = x.a.GistTags,
                    GistTheme          = x.a.GistTheme,
                    Uid = x.a.Uid,

                    Spare3 = x.Nickname
                });
            }
            else
            {
                query = query1.Select(x => new Gist
                {
                    GistCode           = x.a.GistCode,
                    GistContentPreview = x.a.GistContentPreview,
                    GistCreateTime     = x.a.GistCreateTime,
                    GistFilename       = x.a.GistFilename,
                    GistId             = x.a.GistId,
                    GistLanguage       = x.a.GistLanguage,
                    GistRemark         = x.a.GistRemark,
                    GistRow            = x.a.GistRow,
                    GistTags           = x.a.GistTags,
                    GistTheme          = x.a.GistTheme,
                    Uid = x.a.Uid,

                    Spare3 = x.Nickname
                });
            }

            var pag = new SharedPaginationVM
            {
                PageNumber = Math.Max(page, 1),
                PageSize   = 10
            };

            var dicQs = new Dictionary <string, string> {
                { "q", q }
            };

            pag.Total = query.Count();
            var list = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize).ToList();

            SharedPageVM pageSet = new()
            {
                Rows        = list,
                Pag         = pag,
                QueryString = dicQs
            };

            return(pageSet);
        }
コード例 #7
0
        /// <summary>
        /// 获取一个目标ID的回复
        /// </summary>
        /// <param name="replyType">回复分类</param>
        /// <param name="UrTargetId">回复目标ID</param>
        /// <param name="pag">分页信息</param>
        /// <returns></returns>
        public static List <UserReply> ReplyOneQuery(EnumService.ReplyType replyType, string UrTargetId, SharedPaginationVM pag)
        {
            using var db = ContextBaseFactory.CreateDbContext();
            var query = from a in db.UserReply
                        join b in db.UserInfo on a.Uid equals b.UserId into bg
                        from b1 in bg.DefaultIfEmpty()
                        where a.UrTargetType == replyType.ToString() && a.UrTargetId == UrTargetId
                        orderby a.UrCreateTime ascending
                        select new UserReply
            {
                Uid             = a.Uid,
                UrId            = a.UrId,
                UrStatus        = a.UrStatus,
                UrCreateTime    = a.UrCreateTime,
                UrContent       = a.UrContent,
                UrAnonymousLink = a.UrAnonymousLink,
                UrAnonymousMail = a.UrAnonymousMail,
                UrAnonymousName = a.UrAnonymousName,

                UrTargetId = a.UrTargetId,

                Spare1 = b1 == null ? null : b1.Nickname,
                Spare2 = b1 == null ? null : b1.UserPhoto
            };

            pag.Total = query.Count();

            query = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize);

            var list = query.ToList();

            return(list);
        }
コード例 #8
0
        /// <summary>
        /// 获取关联的文章列表
        /// </summary>
        /// <param name="OwnerId">所属用户关联</param>
        /// <param name="connectionType">关联分类</param>
        /// <param name="action">动作</param>
        /// <param name="page"></param>
        /// <returns></returns>
        public static SharedPageVM UserConnWritingQuery(int OwnerId, EnumService.ConnectionType connectionType, int action, int page)
        {
            var pag = new SharedPaginationVM
            {
                PageNumber = Math.Max(page, 1),
                PageSize   = 20
            };

            using var db = ContextBaseFactory.CreateDbContext();
            IQueryable <UserWriting> query = null;

            switch (connectionType)
            {
            case EnumService.ConnectionType.UserWriting:
            {
                query = from a in db.UserConnection
                        join b in db.UserWriting on a.UconnTargetId equals b.UwId.ToString()
                            where a.Uid == OwnerId && a.UconnTargetType == connectionType.ToString() && a.UconnAction == action
                        orderby a.UconnCreateTime descending
                        select b;
            }
            break;
            }

            if (query == null)
            {
                return(null);
            }

            pag.Total = query.Count();

            query = query.Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize);

            var list = query.ToList();

            //文章ID
            var listUwId = list.Select(x => x.UwId).ToList();

            //文章的所有的标签
            var listUwTags = (from a in db.Tags
                              join b in db.UserWritingTags on a.TagName equals b.TagName
                              where listUwId.Contains(b.UwId)
                              select new
            {
                b.UwId,
                b.TagName,
                a.TagIcon
            }).ToList();

            //文章人员ID
            var listUwUid = list.Select(x => x.UwLastUid).Concat(list.Select(x => x.Uid)).Distinct();

            //文章人员ID对应的信息
            var listUwUserInfo = db.UserInfo.Where(x => listUwUid.Contains(x.UserId)).Select(x => new { x.UserId, x.Nickname }).ToList();

            //把信息赋值到文章表的备用字段上
            foreach (var item in list)
            {
                //标签
                item.Spare1 = listUwTags.Where(x => x.UwId == item.UwId).Select(x => new { x.TagName, x.TagIcon }).ToJson();

                //写主昵称
                item.Spare3 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.Uid)?.Nickname;

                //有回复
                if (item.UwLastUid > 0)
                {
                    //回复用户昵称
                    item.Spare2 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.UwLastUid)?.Nickname;
                }
            }

            var vm = new SharedPageVM()
            {
                Rows = list,
                Pag  = pag
            };

            return(vm);
        }
コード例 #9
0
        /// <summary>
        /// 获取文章列表
        /// </summary>
        /// <param name="KeyWords"></param>
        /// <param name="page"></param>
        /// <param name="TagName"></param>
        /// <returns></returns>
        public static SharedPageVM UserWritingQuery(string KeyWords, int page, string TagName = "")
        {
            var vm = new SharedPageVM();

            KeyWords ??= "";

            var pag = new SharedPaginationVM
            {
                PageNumber = Math.Max(page, 1),
                PageSize   = 12
            };

            var dicQs = new Dictionary <string, string> {
                { "k", KeyWords }
            };

            IQueryable <UserWriting> query;

            using var db = ContextBaseFactory.CreateDbContext();
            if (!string.IsNullOrWhiteSpace(TagName))
            {
                query = from a in db.UserWritingTags.Where(x => x.TagName == TagName)
                        join b in db.UserWriting on a.UwId equals b.UwId
                        select b;
                query = query.Distinct();
            }
            else
            {
                query = from a in db.UserWriting select a;
            }

            query = query.Where(x => x.UwOpen == 1 && x.UwStatus == 1);

            if (!string.IsNullOrWhiteSpace(KeyWords))
            {
                var kws = new JiebaSegmenter().Cut(KeyWords).ToList();
                kws.Add(KeyWords);
                kws = kws.Distinct().ToList();

                var inner = PredicateBuilder.New <UserWriting>();
                switch (GlobalTo.TDB)
                {
                case SharedEnum.TypeDB.SQLite:
                    kws.ForEach(k => inner.Or(x => EF.Functions.Like(x.UwTitle, $"%{k}%")));
                    break;

                case SharedEnum.TypeDB.PostgreSQL:
                    kws.ForEach(k => inner.Or(x => EF.Functions.ILike(x.UwTitle, $"%{k}%")));
                    break;

                default:
                    kws.ForEach(k => inner.Or(x => x.UwTitle.Contains(k)));
                    break;
                }

                query = query.Where(inner);
            }

            pag.Total = query.Count();

            query = query.OrderByDescending(x => x.UwId).Skip((pag.PageNumber - 1) * pag.PageSize).Take(pag.PageSize);

            var list = query.ToList();

            //文章ID
            var listUwId = list.Select(x => x.UwId).ToList();

            //文章的所有的标签
            var queryTags = from a in db.UserWritingTags
                            join b in db.Tags on a.TagName equals b.TagName
                            where listUwId.Contains(a.UwId) || b.TagName == TagName
                            orderby a.UwtId ascending
                            select new
            {
                a.UwId,
                a.TagName,
                b.TagIcon
            };
            var listUwTags = queryTags.ToList();

            //文章人员ID
            var listUwUid = list.Select(x => x.UwLastUid).Concat(list.Select(x => x.Uid)).Distinct();

            //文章人员ID对应的信息
            var listUwUserInfo = db.UserInfo.Where(x => listUwUid.Contains(x.UserId)).Select(x => new { x.UserId, x.Nickname }).ToList();

            //把信息赋值到文章表的备用字段上
            foreach (var item in list)
            {
                //标签
                item.Spare1 = listUwTags.Where(x => x.UwId == item.UwId).Select(x => new { x.TagName, x.TagIcon }).ToJson();

                //写主昵称
                item.Spare3 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.Uid)?.Nickname;

                //有回复
                if (item.UwLastUid > 0)
                {
                    //回复用户昵称
                    item.Spare2 = listUwUserInfo.FirstOrDefault(x => x.UserId == item.UwLastUid)?.Nickname;
                }
            }

            vm.Rows        = list;
            vm.Pag         = pag;
            vm.QueryString = dicQs;

            if (!string.IsNullOrWhiteSpace(TagName))
            {
                try
                {
                    var jt = KeyValuesQuery(new List <string> {
                        TagName
                    }).FirstOrDefault()?.KeyValue.ToJObject();
                    if (jt != null)
                    {
                        var tags = new List <object>
                        {
                            new
                            {
                                TagName,
                                listUwTags.FirstOrDefault(x => x.TagName == TagName)?.TagIcon
                            }
                        };

                        vm.Temp = new
                        {
                            abs = new List <string>
                            {
                                jt["abstract"].ToString(),
                                jt["url"].ToString()
                            },
                            tags
                        }.ToJson();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }

            return(vm);
        }