Linq к Объектам, произвольному порядку

Существует еще один, который вы можете использовать

 'mike',
    'pass' => 'se_ret'
);
$files = array(
    array(
        'name' => 'uimg',
        'type' => 'image/jpeg',
        'file' => './profile.jpg',
    )
);

$response = http_post_fields("http://www.example.com/", $fields, $files);
?>

Нажмите здесь для подробностей

36
задан NikolaiDante 17 March 2009 в 16:42
поделиться

5 ответов

Простое решение создало бы массив (или List<T>) и, чем рандомизируют его индексы.

РЕДАКТИРОВАНИЕ:

static IEnumerable<T> Randomize<T>(this IEnumerable<T> source) {
  var array = source.ToArray();
  // randomize indexes (several approaches are possible)
  return array;
}

РЕДАКТИРОВАНИЕ: Лично, я нахожу, что ответ Jon Skeet более изящен:

var results = from ... in ... where ... orderby Guid.NewGuid() select ...

И уверенный, можно взять генератор случайных чисел вместо Guid.NewGuid().

26
ответ дан Paul Fleming 10 October 2019 в 09:48
поделиться

Ответ Toro является тем, который я использовал бы, а скорее как это:

static IEnumerable<T> Randomize<T>(this IEnumerable<T> source)
{
  var list = source.ToList();
  var newList = new List<T>();

  while (source.Count > 0)
  {
     //choose random one and MOVE it from list to newList
  }

  return newList;
}
0
ответ дан Migol 10 October 2019 в 09:48
поделиться

Простой способ сделать это состоит в том, чтобы заказать Guid.NewGuid(), но тогда упорядочивание происходит на стороне клиента. Можно быть в состоянии убедить EF сделать что-то случайное на стороне сервера, но это не обязательно просто - и выполнение его с помощью "порядок случайным числом" , по-видимому, повреждается .

, Чтобы заставить упорядочивание произойти на стороне.NET вместо в EF, Вам нужно AsEnumerable:

IEnumerable<MyEntity> results = context.MyEntity
                                       .Where(en => en.type == myTypeVar)
                                       .AsEnumerable()
                                       .OrderBy(en => context.Random());

было бы лучше стать незаказанным версия в списке и затем переставить это все же.

Random rnd = ...; // Assume a suitable Random instance
List<MyEntity> results = context.MyEntity
                                .Where(en => en.type == myTypeVar)
                                .ToList();

results.Shuffle(rnd); // Assuming an extension method on List<T>

Перестановка более эффективна, чем сортировка кроме чего-либо еще. Посмотрите мой статья о случайности для получения дополнительной информации о получении соответствующего Random экземпляр все же. Существует много реализаций перестановки Фишера-Йетса, доступных на Переполнении стека.

49
ответ дан Community 10 October 2019 в 09:48
поделиться

Как насчет этого:


    var randomizer = new Random();
    var results = from en in context.MyEntity
                  where en.type == myTypeVar
                  let rand = randomizer.Next()
                  orderby rand
                  select en;

0
ответ дан Klinger 10 October 2019 в 09:48
поделиться

Решения, предоставленные здесь, выполняются на клиенте. Если Вы хотите что-то, что выполняется на сервере, вот решение для LINQ к SQL, который можно преобразовать в Платформу Объекта.

2
ответ дан Fabrice 27 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: