예제 #1
0
 /// <summary>
 /// Visszaadja az összes tag.et
 /// </summary>
 /// <returns></returns>
 public List<Tag> GetAllTag()
 {
     using (var db = new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("Tags", () => ( from t in db.Tags select t).ToList());
         return q;
     }
 }
예제 #2
0
 /// <summary>
 /// Az adott id-ju kérdéshez kilistázza a válaszokat
 /// </summary>
 /// <param name="id">Kérdés ID</param>
 /// <returns></returns>
 public List<Answer> GetAllAnswerToOneQuestion(int id)
 {
     using (var db = new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("AnswersToQuestion"+id, () =>(from ans in db.Answers where ans.QuestionId == id select ans).ToList());
         return q;
     }
 }
예제 #3
0
 /// <summary>
 /// Visszaadja az adott id-hoz tartozó UserProfile-t
 /// </summary>
 /// <param name="id">User Id</param>
 /// <returns></returns>
 public UserProfile GetUserById(int id)
 {
     using (var db=new SoAContext())
     {
         var q = (from u in db.UserProfiles
                  where u.UserId == id
                  select u).SingleOrDefault();
         return q;
     }
 }
예제 #4
0
        /// <summary>
        /// Lekérdezi az összes felhasználót egy listába
        /// </summary>
        /// <returns></returns>
        public List<UserProfile> GetAllUsers()
        {
            using (var db =new SoAContext())
            {
                var q = from u in db.UserProfiles
                        select u;

                return q.ToList();
            }
        }
예제 #5
0
 /// <summary>
 /// MEgadja a tag-t ID alapján
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public Tag GetTagById(int id)
 {
     using (var db=new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("GetTag"+id, () => (from t in db.Tags
                  where t.Id == id
                  select t).SingleOrDefault());
         return q;
     }
 }
예제 #6
0
 /// <summary>
 /// Visszaadja az egy kérdéshez tartozó Tag-eket
 /// </summary>
 /// <param name="id">Kérdés Id</param>
 /// <returns></returns>
 public List<Tag> GetAllTagToOneQuestion(int id)
 {
     using (var db=new SoAContext())
     {
       //  var q = HttpContext.Current.Cache.GetFromCache("Tags", ()=>(from t in db.QuestionHasTags
      //            where t.QuestionId == id
     //             select t.Tag).ToList());
         var q = db.QuestionHasTags.Where(t => t.QuestionId == id).Select(t => t.Tag).ToList();
         return q;
     }
 }
예제 #7
0
        /// <summary>
        /// Összes válasz kilistázása egy kérdéshez egy efelhasználótól
        /// </summary>
        /// <param name="questionid">Kérdés ID</param>
        /// <param name="userid">Felhasználó ID</param>
        /// <returns></returns>
        public List<Answer> GetAllAnswerToOneQuestionFromOneUser(int questionid, int userid)
        {
            using (var db=new SoAContext())
            {
                var answers = HttpContext.Current.Cache.GetFromCache("AnswersToQuestion" + questionid+"User"+userid, () => (from a in db.Answers
                               where a.QuestionId == questionid && a.UserId == userid
                               select a).ToList());
                return answers;

            }
        }
예제 #8
0
 /// <summary>
 /// Válasz szerkesztése
 /// </summary>
 /// <param name="data">Válasz adatai</param>
 public void EditAnswer(Answer data)
 {
     using (var db = new SoAContext())
     {
         var q = from a in db.Answers where a.Id == data.Id select a;
         var ans = q.SingleOrDefault();
         ans.Content = data.Content;
         db.SaveChanges();
         HttpContext.Current.Cache.UpdateCache("AnswersToQuestion" + data.QuestionId, data);
         HttpContext.Current.Cache.UpdateCache("AnswersToQuestion" + data.QuestionId + "User" + data.UserId, data);
     }
 }
예제 #9
0
        /// <summary>
        /// Az adott kérdésre az adott user által beírja az adott szavazatot
        /// </summary>
        /// <param name="questionid">Kérdés Id</param>
        /// <param name="userid">User Id</param>
        /// <param name="vote">Szavazat</param>
        public void Vote(int questionid, int userid, int vote)
        {
            using (var db=new SoAContext())
            {
                QuestionHasVote add = new QuestionHasVote();
                add.QuestionId=questionid;
                add.UserId=userid;
                add.Rating=vote;
                db.QuestionHasVotes.Add(add);
                db.SaveChanges();
                HttpContext.Current.Cache.UpdateCache("QuestionVote" + questionid, add);

            }
        }
예제 #10
0
        /// <summary>
        /// Válasz hozzáadása a DB-hez
        /// </summary>
        /// <param name="data">Válasz adatai</param>
        public void AddAnswer(Answer data, int questionID, int userid)
        {
            using (var db = new SoAContext())
            {
                data.Date = DateTime.Now;
                data.UserId = userid;
                data.QuestionId = questionID;
                db.Answers.Add(data);
                db.SaveChanges();

                HttpContext.Current.Cache.UpdateCache("AnsweredQuestions" + userid, data);
                HttpContext.Current.Cache.UpdateCache("AnswersToQuestion"+questionID, data);
                HttpContext.Current.Cache.UpdateCache("AnswersToQuestion" + questionID+"User"+userid, data);
            }
        }
예제 #11
0
 /// <summary>
 /// Visszaadja, hogy az adott válaszra szavazott-e már az adott user
 /// </summary>
 /// <param name="answerid">Válasz Id</param>
 /// <param name="userid">User Id</param>
 /// <returns></returns>
 public bool IsVotedForAnswer(int answerid, int userid)
 {
     using (var db = new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("AnswerVote" + answerid, () => (from v in db.AnswerHasVotes
                  where v.AnswerId == answerid && v.UserId == userid
                  select v).SingleOrDefault());
         if (q == null)
         {
             return false;
         }
         else
         {
             return true;
         }
     }
 }
예제 #12
0
 /// <summary>
 /// Visszaadja, hogy az adott kérdésre szavazott-e már az adott user
 /// </summary>
 /// <param name="questionid">Kérdés Id</param>
 /// <param name="userid">User Id</param>
 /// <returns></returns>
 public bool IsVotedForQuestion(int questionid, int userid)
 {
     using (var db=new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("QuestionVote" + questionid, () => (from v in db.QuestionHasVotes
                  where v.QuestionId == questionid && v.UserId == userid
                  select v).SingleOrDefault());
         if (q == null)
         {
             return false;
         }
         else
         {
             return true;
         }
     }
 }
예제 #13
0
        /// <summary>
        /// Visszaadja egy adott felhasználóhoz tartozó osztályzatot, jelenleg úgy számolja, 
        /// hogy megnézi az összes a felhasználó általa adott kérdést és választ és ezeknek veszi az összegét.
        /// </summary>
        /// <param name="userid">User Id</param>
        /// <returns></returns>
        public int GetUserRating(int userid)
        {
            using (var db=new SoAContext())
            {
              /*  List<int> questionrating = (from u in db.Questions
                         join uv in db.QuestionHasVotes on u.Id equals uv.QuestionId
                         where u.UserId == userid
                         select uv.Rating).ToList();

                List<int> answerating = (from u in db.Answers
                                         join uv in db.AnswerHasVotes on u.Id equals uv.AnswerId
                                         where u.UserId == userid
                                         select uv.Rating).ToList();

                int rating = (questionrating == null ? 0 : questionrating.Sum()) + (answerating == null ? 0 : answerating.Sum());*/

                var qrating = db.QuestionHasVotes.Where(qhv => qhv.Question.UserId == userid).Select(s => s.Rating).ToList();
                var arating = db.AnswerHasVotes.Where(ahv => ahv.Answer.UserId == userid).Select(s => s.Rating).ToList();
                return (qrating == null ? 0 : qrating.Sum()) + (arating == null ? 0 : arating.Sum());

            }
        }
            public SimpleMembershipInitializer()
            {
                Database.SetInitializer<SoAContext>(null);

                try
                {
                    using (var context = new SoAContext())
                    {
                        if (!context.Database.Exists())
                        {
                            // Create the SimpleMembership database without Entity Framework migration schema
                            ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                        }
                    }
                    if (!WebSecurity.Initialized)
                        WebSecurity.InitializeDatabaseConnection("SoAContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);
                }
                catch (Exception ex)
                {
                    throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
                }
            }
예제 #15
0
 /// <summary>
 /// Kérdés szerkesztése
 /// </summary>
 /// <param name="data">Kérdés adatai</param>
 public void EditQuestion(Question data)
 {
     using (var db = new SoAContext())
     {
         var q = from question in db.Questions where (question.Id == data.Id) select question;
         var editableData = q.SingleOrDefault();
         editableData.Title = data.Title;
         editableData.Content = data.Content;
         db.SaveChanges();
         HttpContext.Current.Cache.UpdateCache("GetQuestion" + data.Id, data);
     }
 }
예제 #16
0
 /// <summary>
 /// Ajaxos kéréshet a címeket kikeresi
 /// </summary>
 /// <param name="key">Kulcsparaméter</param>
 /// <returns></returns>
 public List<Question> AjaxSearchTitle(string key)
 {
     using (var db = new SoAContext())
     {
         var questions = (from q in db.Questions where q.Title.Contains(key) select q).ToList();
         return questions;
     }
 }
예제 #17
0
 /// <summary>
 /// Visszaadja a megadott x-nek megfelelő számú legfrissebb kérdést
 /// </summary>
 /// <param name="x">A lekérdezendő kérdések száma</param>
 /// <returns></returns>
 public List<Question> GetXLatestQuestion(int x)
 {
     using (var db = new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("LatestQuestions", () => db.Questions.OrderByDescending(v => v.Date).Take(x).ToList());
         return q;
     }
 }
예제 #18
0
        /// <summary>
        /// Visszaadja egy kérdéshez a hozzá tartozó szavazatok összegét
        /// </summary>
        /// <param name="id">Kérdés Id</param>
        /// <returns></returns>
        public int GetVote(int id)
        {
            using (var db = new SoAContext())
            {
                //Lekérdezzük az adott kérdéshez tartozó szavazatokat
                var vote = HttpContext.Current.Cache.GetFromCache("QuestionVote" + id, () => (from q in db.QuestionHasVotes
                                                                                              where q.QuestionId == id
                                                                                              select q.Rating).ToList());
                //Ha nem jött rá szavazat, akkor 0-t adunk vissza
                if (vote.Count == 0)
                    return 0;
                //Ha jött, akkor visszaadjuk a szavazatok összegét
                return vote.Sum();

            }
        }
예제 #19
0
        /// <summary>
        /// Listázza az egy kérdéshez kapcsolódó egyéb kérdéseket
        /// </summary>
        /// <param name="questionid">Kérdés ID</param>
        /// <returns></returns>
        public List<Question> GetRelatedQuestions(int questionid)
        {
            using (var db = new SoAContext())
            {

                var tman = new TagManager();

                //Lekérdezzük a kérdéshez tartozó tag-eket
                var tags = HttpContext.Current.Cache.GetFromCache("QuestionTags" + questionid, () => tman.GetAllTagToOneQuestion(questionid).Select(x => x.Id).ToList());

                //Vesszük azon kérdéseket, amelyek ezek közül valamelyiket tartalmazzák, közüllük pedig a legfrissebb 10-et kiválasztjuk
                var releateds = HttpContext.Current.Cache.GetFromCache("ReleatedQuestions" + questionid, () => db.Questions.Where(q => q.QuestionHasTags.Any(qht => tags.Contains(qht.TagId)) && q.Id != questionid).OrderByDescending(d => d.Date).Take(10).ToList());
                return releateds;
            }
        }
예제 #20
0
        /// <summary>
        /// Visszaadja a felhasználóhoz illő kérdéseket
        /// </summary>
        /// <param name="userid">Felhasználó ID</param>
        /// <returns></returns>
        public List<Question> GetQuestionsFitToUser(int userid)
        {
            using (var db = new SoAContext())
            {
                //Lekérdezzük hogy a felhasználó által megválaszolt kérdések milyen tag-eket tartalmaznak és hányszor, majd ezekből a 3 legtöbbször megválaszoltat vesszük
                var usertags = db.Tags.Where(d => d.QuestionHasTags.Any(q => q.Question.Answers.Any(a => a.UserId == userid))).Select(d => new
                {
                    Tag = d,
                    Num = d.QuestionHasTags.Count()
                }).OrderByDescending(o => o.Num).Take(3).Select(t => t.Tag);

                //Vesszük a mostani időpont mínusz egy hetet, hogy tudjuk számolni majd, hogy melyik kérdés jött az utóbbi héten
                var lastday = DateTime.Now.AddDays(-7);

                //Lekérdezzük azokat a kérdéseket, amelyek a legutóbbi egy hétben születtek, nincs rájuk adott válasz és van olyan tagjük, ami a felhasználó kedvencei közé tartozik, majd ebből vesszük a 10 legfrissebbet
                var fitquestions = db.Questions.Where(q => (q.Date > lastday &&  q.Answers.Count() == 0 && q.QuestionHasTags.Any(qht => usertags.Contains(qht.Tag)) )).OrderByDescending(x => x.Date).Take(10).ToList();

                return fitquestions;
            }
        }
예제 #21
0
 /// <summary>
 /// Visszaad egy kérdést az ID alapján
 /// </summary>
 /// <param name="id"> Kérdés ID</param>
 /// <returns></returns>
 public Question GetQuestion(int id)
 {
     using (var db = new SoAContext())
     {
         var ques = HttpContext.Current.Cache.GetFromCache("GetQuestion" + id, () => (db.Questions.Where(q => q.Id == id).SingleOrDefault()));
         return ques;
     }
 }
예제 #22
0
        /// <summary>
        /// Az adott válaszra az adott user által beírja az adott szavazatot
        /// </summary>
        /// <param name="answerid">Válasz Id</param>
        /// <param name="userid">User Id</param>
        /// <param name="vote">Szavazat</param>
        public void VoteAnswer(int answerid, int userid, int vote)
        {
            using (var db = new SoAContext())
            {
                AnswerHasVote add = new AnswerHasVote();
                add.AnswerId = answerid;
                add.UserId = userid;
                add.Rating = vote;
                db.AnswerHasVotes.Add(add);
                db.SaveChanges();

                HttpContext.Current.Cache.UpdateCache("AnswerVote" + answerid, add);
            }
        }
예제 #23
0
        /// <summary>
        /// Egy felhasználó megválaszolt kérdéseinek listázása oldalak szerint
        /// </summary>
        /// <param name="userid">Felhasználó ID</param>
        /// <param name="pageNumber">Oldal száma</param>
        /// <param name="pageSize">Oldal mérete</param>
        /// <param name="total">Összes ilyen kérdés száma</param>
        /// <returns></returns>
        public List<Question> AnsweredQuestionsToPagedList(int userid, int pageNumber, int pageSize, out int total)
        {
            using (var db = new SoAContext())
            {
                //Kivesszük a cache-ből az adott felhasználó által megválaszolt kérdéseket
                var ques = HttpContext.Current.Cache.GetFromCache("AnsweredQuestions" + userid, () => (db.Questions.Where(q => q.Answers.Any(a => a.UserId == userid)).OrderByDescending(quest => quest.Date).Select(t => t).ToList()));
                //Ezekből vesszük az adott oldalnak megfelelőeket
                ques = ques.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
                //Vesszük a felhasználó által megválaszolt kérdések számát
                total = db.Questions.Where(q => q.Answers.Any(a => a.UserId == userid)).Count();

                return ques;
            }
        }
예제 #24
0
        /// <summary>
        /// Egy adott nevű taghez keresi ki az összes kérdést
        /// </summary>
        /// <param name="tagId"></param>
        /// <returns></returns>
        public List<Question> AllQuestionToTag(string tagName)
        {
            using (var db = new SoAContext())
            {
                List<Question> rl = null;
                var queryId = db.Tags.Where(tags => tags.Name.Equals(tagName)).SingleOrDefault();
                if (queryId != null)
                {
                    rl = db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == queryId.Id)).ToList();
                }

                return rl;
            }
        }
예제 #25
0
        /// <summary>
        /// Hozzáad egy kérdést az adatbázishoz
        /// </summary>
        /// <param name="data">Kérdés adatai</param>
        public void AddQuestion(Question data, int userID, List<string> tagList)
        {
            using (var db = new SoAContext())
            {
                //Beállítjuk az aktuális dátumot
                data.Date = DateTime.Now;
                data.UserId = userID;
                db.Questions.Add(data);
                db.SaveChanges();

                //Tagek kezelése
                //Megnézzük, h létezik-e az adott, tag, ha nem akkor beszúrunk
                Tag tag = null;
                foreach (var item in tagList)
                {
                    var q = (from t in db.Tags where item.Equals(t.Name) select t).ToArray();
                    //Ha nem létezik, beszúrunk
                    if (q.Length == 0)
                    {
                        tag = new Tag();
                        tag.Name = item;
                        db.Tags.Add(tag);
                        db.SaveChanges();

                        //Hozzárendeljük a tag-et a kérdéshez
                        var qt = new QuestionHasTag();
                        qt.QuestionId = data.Id;
                        qt.TagId = tag.Id;
                        db.QuestionHasTags.Add(qt);
                        db.SaveChanges();
                    }
                    //Létezik ilyen tag, hozzárendeleés
                    else
                    {
                        var query = from t in db.Tags where item.Equals(t.Name) select t;
                        tag = query.Single();
                        var qt = new QuestionHasTag();
                        qt.QuestionId = data.Id;
                        qt.TagId = tag.Id;
                        db.QuestionHasTags.Add(qt);
                        db.SaveChanges();
                    }
                    HttpContext.Current.Cache.UpdateCache("Tags", item);
                }

                db.SaveChanges();

                int pageCache = 5;

                HttpContext.Current.Cache.UpdateCache("AllQuestions", data);
                HttpContext.Current.Cache.UpdateCache("LatestQuestions", data);
                HttpContext.Current.Cache.UpdateCache("QuestionsByUser" + data.UserId, data);

                for (int i = 1; i < pageCache; i++)
                {
                    HttpContext.Current.Cache.UpdateCache("PageQuestions" + i, data);
                }

                foreach (var qht in data.QuestionHasTags)
                {
                    for (int i = 1; i < pageCache; i++)
                    {
                        HttpContext.Current.Cache.UpdateCache("QuestionsByTag" + qht.TagId + "Page" + i, data);
                    }
                }

                HttpContext.Current.Cache.UpdateCache("QuestionsByUser" + data.UserId, data);

            }
        }
예제 #26
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return RedirectToAction("Manage");
            }

            if (ModelState.IsValid)
            {
                // Insert a new user into the database
                using (SoAContext db = new SoAContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Check if user already exists
                    if (user == null)
                    {
                        // Insert name into the profile table
                        db.UserProfiles.Add(new UserProfile { UserName = model.UserName });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return RedirectToLocal(returnUrl);
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", Resources.Global.UsernameIsReserved);
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl = returnUrl;
            return View(model);
        }
예제 #27
0
        /// <summary>
        /// Visszaadja az adott taghez tartozó kérdéseket
        /// </summary>
        /// <param name="tagid"></param>
        /// <returns></returns>
        ///   
        public List<Question> AllQuestionToOneTagToPagedList(int tagid, int pageNumber, int pageSize, out int total)
        {
            using (var db = new SoAContext())
            {
                //Csinálunk egy listát ahova a kérdések kerülnek majd
                List<Question> questions;

                //Ha több, mint 5. oldalról kérdezünk le, akkor rögtön az adatbázisból vesszük ki, ha nem akkor a cache-ből az eredményt
                if (pageNumber > 5)
                {
                    questions = db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == tagid)).OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();

                }
                else
                {
                    questions = HttpContext.Current.Cache.GetFromCache("QuestionsByTag" + tagid + "Page" + pageNumber, () => db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == tagid)).OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList());
                }

                //Lekérdezzük, hogy összesen hány kérdés szerepel az adott tag-gel
                total = db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == tagid)).Count();
                return questions;
            }
        }
예제 #28
0
 /// <summary>
 /// Visszaadja az időrend szerinti sorrendben állított kérdések közül a megfelelő oldalon lévőt és az összes kérdés számát
 /// </summary>
 /// <param name="pageNumber">Oldal száma</param>
 /// <param name="pageSize">Oldalak mérete</param>
 /// <param name="total">Összes kérdés száma</param>
 /// <returns></returns>
 public List<Question> AllQuestionsToPagedList(int pageNumber, int pageSize, out int total)
 {
     using (var db = new SoAContext())
     {
         List<Question> questions;
         //Ha 5-nél későbbi oldalról kérjük le a kérdéseket, akkor rögtön az adatbázisból vesszük a megfelelő kérdéseket
         if (pageNumber > 5)
         {
             questions = db.Questions.OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
         }
         else
         {
             //Ha 5-nél korábbi oldalról kérjük le a kérdéseket, akkor kivesszük azokat a cache-ből, ha már benne vannak
             questions = HttpContext.Current.Cache.GetFromCache("PageQuestions" + pageNumber, () => db.Questions.OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList());
         }
         //Lekérdezzük az összes kérdés számát
         total = db.Questions.Count();
         return questions;
     }
 }
예제 #29
0
 /// <summary>
 /// Egy felhasználó kérdéseinek listázása oldalak szerint
 /// </summary>
 /// <param name="userid">Felhasználó ID</param>
 /// <param name="pageNumber">Oldal száma</param>
 /// <param name="pageSize">Oldal mérete</param>
 /// <param name="total">Összes ilyen kérdés száma</param>
 /// <returns></returns>
 public List<Question> AllQuestionToOneUserToPagedList(int userid, int pageNumber, int pageSize, out int total)
 {
     using (var db = new SoAContext())
     {
         //Lekérdezzük a cache-ből, ha benne van, a felhasználó által írt kérdéseket
         var questions = HttpContext.Current.Cache.GetFromCache("QuestionsByUser" + userid, () => db.Questions.Where(q => q.UserId == userid).OrderByDescending(q => q.Date).ToList());
         //Vesszük az adott oldalhoz tartozóakat
         questions = questions.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
         //Lekérdezzük az ilyen kérdések számát
         total = db.Questions.Where(q => q.UserId == userid).Count();
         return questions;
     }
 }
예제 #30
0
 /// <summary>
 /// Visszaadja az összes kérdést időrend szerint kezdve a legújabbal
 /// </summary>
 /// <returns></returns>
 public List<Question> GetAllQuestion()
 {
     using (var db = new SoAContext())
     {
         var q = HttpContext.Current.Cache.GetFromCache("AllQuestions", () => (from qs in db.Questions select qs).OrderByDescending(v => v.Date).ToList());
         return q;
     }
 }