public List <ReturnedReply> getReplies(int id)
        {
            var listOfReplies = from rp in _context.newReviewReply
                                join u in _context.newReviews on rp.newReview.Id equals u.Id
                                where u.Id == id
                                select new { rp.reply, rp.agree, rp.newUser.UserName };

            List <ReturnedReply> replies = new List <ReturnedReply>();

            foreach (var item in listOfReplies.ToList())
            {
                ReturnedReply reply = new ReturnedReply();
                reply.user       = item.UserName;
                reply.likeordis  = item.agree;
                reply.rpContents = item.reply;

                replies.Add(reply);
            }

            return(replies);
        }
        public async Task <ReturnedReply> makeReply(string contents, bool agree, int reviewId)
        {
            ReviewReply reply = new ReviewReply();

            reply.agree     = agree;
            reply.reply     = contents;
            reply.newReview = getReview(reviewId);
            reply.newUser   = getUser().Result;

            Console.WriteLine("The reply " + contents + " Liked or Disliked " + agree + "ReviewId" + reviewId);
            if (ModelState.IsValid)
            {
                _context.Add(reply);
                await _context.SaveChangesAsync();

                Console.WriteLine("Added a reply");

                ReturnedReply mapReply = new ReturnedReply();
                mapReply.likeordis  = agree;
                mapReply.rpContents = contents;
                mapReply.user       = reply.newUser.UserName;
                return(mapReply);
                //var rpPlace = findPlace(place);

                //var uReplies = from r in _context.newReviews
                //               join rp in _context.newReviewReply on r.Id equals rp.newReview.Id
                //               where r.FoodName == foundplace.FoodName
                //               select new { f.Review1, f2.FoodName, f.newUser.UserName, f.ReviewDate, f.Like };
            }
            else
            {
                Console.WriteLine("Not a Valid Model State");
                ReturnedReply empty = new ReturnedReply();
                empty.rpContents = "Empty";
                return(empty);
            }
        }
        public List <ReturnedReview> getReviews2(NewFoodTable table)
        {
            if (ModelState.IsValid)
            {
                Dictionary <int, ReturnedReview> myReplyHolder = new Dictionary <int, ReturnedReview>();
                //Check to see if the database contains the place
                var dplace = from p in _context.newFoodTable
                             where p.FoodName == table.FoodName
                             select p;
                NewFoodTable foundplace;
                //If not make the place
                if (dplace.Count() == 0)
                {
                    NewFoodTable newplace = table;
                    _context.Add(newplace);
                    foundplace = newplace;
                }
                else
                {
                    foundplace = dplace.First();
                }



                var nReviews = from r in _context.newReviews
                               join f2 in _context.newFoodTable on r.newFoodTable.Id equals f2.Id
                               join f3 in _context.newReviewReply on r.Id equals f3.newReview.Id
                               into myList
                               from x in myList.DefaultIfEmpty()
                               where f2.FoodName == foundplace.FoodName
                               select new
                {
                    r.Review1,
                    r.Id,
                    r.newUser.UserName,
                    r.ReviewDate,
                    r.Like,
                    f2.FoodName,
                    ReplyId   = (x == null ? 0 : x.Id),
                    Reply     = (x == null ? String.Empty : x.reply),
                    ReplyUser = (x == null ? String.Empty : x.newUser.UserName)
                };



                List <ReturnedReview> newList = new List <ReturnedReview>();
                foreach (var item in nReviews.ToList())
                {
                    Console.WriteLine("FoodName: " + item.FoodName +
                                      " User " + item.UserName + " Review " + item.Review1);

                    Console.WriteLine("Reply Id" + item.ReplyId);
                    ReturnedReview thisReview = new ReturnedReview();
                    thisReview.FoodName  = item.FoodName;
                    thisReview.rContents = item.Review1;
                    thisReview.Username  = item.UserName;
                    thisReview.rLike     = item.Like;

                    thisReview.rId   = item.Id;
                    thisReview.rDate = item.ReviewDate.ToString();


                    if (item.ReplyId != 0)
                    {
                        if (myReplyHolder.ContainsKey(item.Id))
                        {
                            Console.WriteLine("Found the key");
                            Console.WriteLine("The Review " + item.Review1);
                            ReturnedReview foundReply = myReplyHolder[item.Id];
                            ReturnedReply  uReply     = new ReturnedReply();


                            uReply.user       = item.ReplyUser;
                            uReply.rpContents = item.Reply;
                            thisReview.rpList = new List <ReturnedReply>();
                            thisReview.rpList.Add(uReply);


                            foundReply.rpList.Add(uReply);

                            foreach (var reply in foundReply.rpList)
                            {
                                Console.WriteLine("The Replies so far " + reply.rpContents);
                            }
                        }

                        else
                        {
                            Console.WriteLine("Adding new key");

                            ReturnedReply uReply = new ReturnedReply();
                            uReply.user       = item.ReplyUser;
                            uReply.rpContents = item.Reply;


                            thisReview.rpList = new List <ReturnedReply>();
                            thisReview.rpList.Add(uReply);

                            Console.WriteLine(uReply.rpContents);
                            myReplyHolder.Add(item.Id, thisReview);
                        }
                    }
                    else
                    {
                        newList.Add(thisReview);
                    }
                }

                foreach (var repItem in myReplyHolder)
                {
                    Console.WriteLine("Adding Review with Replies to List");
                    newList.Add(repItem.Value);
                }

                return(newList);
            }
            else
            {
                List <ReturnedReview> emptyList = new List <ReturnedReview>();

                return(emptyList);
            }
        }