Случайный ряд из Линк в Sql - PullRequest
109 голосов
/ 15 марта 2009

Каков наилучший (и самый быстрый) способ получения случайной строки, используя Linq to SQL, когда у меня есть условие, например, какое поле должно быть истинным?

Ответы [ 15 ]

0 голосов
/ 24 апреля 2013

Я использую этот метод для получения случайных новостей, и он отлично работает;)

    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<int>();
            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("<div class=\"divRandomNews\"><img src=\"files/1364193007_news.png\" class=\"randomNewsImg\" />" +
                                  "<a class=\"randomNews\" href=\"News.aspx?id={0}\" target=\"_blank\">{1}</a></div>",
                                  news.ID, news.Title);
            }
        }
        return temp;
    }
0 голосов
/ 09 октября 2012

В приведенном ниже примере будет вызван источник для получения счетчика, а затем применено к источнику выражение пропуска с числом от 0 до n. Второй метод применяет порядок с помощью случайного объекта (который упорядочит все в памяти) и выбирает число, переданное в вызов метода.

public static class IEnumerable
{
    static Random rng = new Random((int)DateTime.Now.Ticks);

    public static T RandomElement<T>(this IEnumerable<T> source)
    {
        T current = default(T);
        int c = source.Count();
        int r = rng.Next(c);
        current = source.Skip(r).First();
        return current;
    }

    public static IEnumerable<T> RandomElements<T>(this IEnumerable<T> source, int number)
    {
        return source.OrderBy(r => rng.Next()).Take(number);
    }
}
0 голосов
/ 26 сентября 2012

Использование LINQ to SQL в LINQPad, поскольку операторы C # выглядят как

IEnumerable<Customer> customers = this.ExecuteQuery<Customer>(@"SELECT top 10 * from [Customers] order by newid()");
customers.Dump();

Сгенерированный SQL

SELECT top 10 * from [Customers] order by newid()
0 голосов
/ 22 июня 2012

Пришел сюда, задаваясь вопросом, как получить несколько случайных страниц из небольшого их числа, чтобы каждый пользователь получил несколько разных случайных 3 страниц.

Это мое окончательное решение, работающее с LINQ для запросов к списку страниц в Sharepoint 2010. Это в Visual Basic, извините: p

Dim Aleatorio As New Random()

Dim Paginas = From a As SPListItem In Sitio.RootWeb.Lists("Páginas") Order By Aleatorio.Next Take 3

Вероятно, нужно получить профиль, прежде чем запрашивать большое количество результатов, но это идеально подходит для моей цели

0 голосов
/ 18 мая 2012

У меня есть запрос случайной функции против DataTable s:

var result = (from result in dt.AsEnumerable()
              order by Guid.NewGuid()
              select result).Take(3); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...