Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

October 12, 2009 / by Zsolt Soczó

Random orderby Linq és EF használatával

Az SQL Serveren szokásos orderby newid() szerveroldali megoldást csak linq to SQL esetén tudjuk kihasználni, szerveroldali függvénnyel. Az EF-ben az ilyesmi nem megy:

… orderby Guid.NewID() …

Ez az EF verzió még nem tudja lefordítani szerveroldali kifejezéssé az orderby kifejezését.
Viszont a random rendezést át lehet nyomni kliensoldalra, ha a lekérdezést “materializáluk” (AsEnumerable) előbb:

Random rnd = new Random();
(from s in ATSEntities.Instance.Symbol
select s).AsEnumerable().OrderBy(o => rnd.Next()));

Nem guidot használtam, hanem Randomot, az kisebb költségű, és az én célomra nem baj, ha csak pszeudo-random a sorrend.

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

LEAVE A COMMENT

4 COMMENTS

  • Meister October 12, 2009

    Viszont ez esetben a teljes recordset átmegy a kliensre?

    Azaz ha egy 1000000 rekordos táblából kéred le a top 100-at random, akkor mi megy át a kliensre?

  • Soczó Zsolt October 12, 2009

    Persze, az egész, de úgyis kell az összes sor a kliensen. Ha nem így lenne, nem így oldanám meg.

  • Meister October 12, 2009

    Ok, ez nem volt beleírva a post-ba. :-)

  • Szindbad October 13, 2009

    Igazabol a newid() is pszeudo-random. :)