Seleccionar filas aleatorias usando LINQ 2 SQL

Me preguntaba cuál era la mejor manera de seleccionar filas aleatorias de una tabla usando LINQ 2 SQL, mientras buscaba encontré esas dos preguntas:

Fila aleatoria de Linq a Sql

Obtenga una fila aleatoria con LINQtoSQL

pero no creo que esta sea la mejor y más rápida forma, según msdn, usar NewID() es una mala forma de seleccionar filas al azar y en este artículo:

http://msdn.microsoft.com/en-us/library/cc441928.aspx

propusieron otra consulta que es más rápida que el método NewID:

  SELECT * FROM Table1
  WHERE (ABS(CAST(
  (BINARY_CHECKSUM(*) *
  RAND()) as int)) % 100) < 10

la idea básica detrás de esta consulta es que quieren generar un número aleatorio entre 0 y 99 para cada fila de la tabla, y luego elegir todas aquellas filas cuyo número aleatorio sea menor que el valor del porcentaje especificado

pero cuando traté de hacer esto usando LINQ no pude encontrar un equivalente a BINARY_CHECKSUM

Entonces, ¿es su equivalente para BINARY_CHECKSUM en LINQ?

y ¿es realmente la forma más rápida de seleccionar filas al azar? (si me pueden ayudar a convertirlo a código LINQ me será mucho más fácil)

gracias por tu ayuda

preguntado el 22 de mayo de 12 a las 19:05

1 Respuestas

Algo así funcionaría?

private static readonly Random _randomInstance = new Random();
private readonly Func<int, bool> ChanceSuccess = new Func<float, bool>(f =>
    _randomInstance.Next(0, 101) <= f);

var result = from row in Table1
             where ChanceSuccess(10)
             select row;

contestado el 25 de mayo de 12 a las 11:05

Su consulta pierde algunos bits, al menos select y un punto y coma al final. - Joey

De ninguna manera eso será traducible a SQL. erikallen

@erikkallen La pregunta era sobre linq-to-sql y EF, ¿no? (undownvote hombre). - agentefuego

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.