Random row from Linq to Sql

前端 未结 15 2658
南笙
南笙 2020-11-22 05:39

What is the best (and fastest) way to retrieve a random row using Linq to SQL when I have a condition, e.g. some field must be true?

15条回答
  •  离开以前
    2020-11-22 05:49

    i use this method for take random news and its work fine ;)

        public string LoadRandomNews(int maxNews)
        {
            string temp = "";
    
            using (var db = new DataClassesDataContext())
            {
                var newsCount = (from p in db.Tbl_DynamicContents
                                 where p.TimeFoPublish.Value.Date <= DateTime.Now
                                 select p).Count();
                int i;
                if (newsCount < maxNews)
                    i = newsCount;
                else i = maxNews;
                var r = new Random();
                var lastNumber = new List();
                for (; i > 0; i--)
                {
                    int currentNumber = r.Next(0, newsCount);
                    if (!lastNumber.Contains(currentNumber))
                    { lastNumber.Add(currentNumber); }
                    else
                    {
                        while (true)
                        {
                            currentNumber = r.Next(0, newsCount);
                            if (!lastNumber.Contains(currentNumber))
                            {
                                lastNumber.Add(currentNumber);
                                break;
                            }
                        }
                    }
                    if (currentNumber == newsCount)
                        currentNumber--;
                    var news = (from p in db.Tbl_DynamicContents
                                orderby p.ID descending
                                where p.TimeFoPublish.Value.Date <= DateTime.Now
                                select p).Skip(currentNumber).Take(1).Single();
                    temp +=
                        string.Format("
    " + "{1}
    ", news.ID, news.Title); } } return temp; }

提交回复
热议问题