示例#1
0
        /// <summary>
        ///  Get List User Like,Buy Product
        /// </summary>
        /// <param name="type"> 1_Like , 2_Buy</param>
        /// <param name="ID">ID Product</param>
        /// <param name="number">Amount row select</param>
        /// <returns>List <UserProfile></returns>
        public static List <UserProfile> GetListUserProfileRandom(int type, int productId, int number, int userId = 0)
        {
            List <UserProfile> listuser      = new List <UserProfile>();
            List <UserProfile> followedUsers = Follow_Logic.GetFollowedUsers(userId);

            switch (type)
            {
            case 1:
                if (userId <= 0)
                {
                    // Not login user
                    listuser = (from ProductLike pro in db.ProductLikes
                                where pro.ProductId == productId orderby pro.ProductLikeId descending
                                select pro.User).Distinct().Take(number).ToList();
                }
                else
                {
                    // Login user

                    List <UserProfile> likeClickedUsers = (from ProductLike pro in db.ProductLikes
                                                           where pro.ProductId == productId orderby pro.ProductLikeId descending
                                                           select pro.User).Distinct().ToList();
                    listuser = (from f in followedUsers
                                join l in likeClickedUsers on f.UserId equals l.UserId
                                select l).ToList();
                    foreach (var followedUser in followedUsers)
                    {
                        likeClickedUsers.RemoveAll(u => u.UserId == followedUser.UserId);
                    }
                    listuser.AddRange(likeClickedUsers);
                }

                break;

            case 2:
                if (userId <= 0)
                {
                    listuser = (from OrderDetail order in db.OrderDetails
                                where order.ProductId == productId
                                orderby order.OrderId descending
                                select order.Order.Users).Distinct().Take(number).ToList();
                }
                else
                {
                    // Login user
                    List <UserProfile> orderedUsers = (from OrderDetail order in db.OrderDetails
                                                       where order.ProductId == productId
                                                       orderby order.OrderId descending
                                                       select order.Order.Users).Distinct().ToList();
                    listuser = (from f in followedUsers
                                join o in orderedUsers on f.UserId equals o.UserId
                                select o).ToList();
                    foreach (var followedUser in followedUsers)
                    {
                        orderedUsers.RemoveAll(u => u.UserId == followedUser.UserId);
                    }
                    listuser.AddRange(orderedUsers);
                }

                break;

            default:
                break;
            }

            // int count = listuser.Count(); // get count here
            // int index = new Random(number).Next(count);

            // var result = listuser.Skip(index).ToList(); // pick on here

            return(listuser);
        }