Soci (Soczó Zsolt) szakmai blogja

2009.10.12.

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.

4 Comments

  1. 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?

    Comment by Meister — 2009.10.12. @ 16:48

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

    Comment by Soczó Zsolt — 2009.10.12. @ 17:07

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

    Comment by Meister — 2009.10.12. @ 17:36

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

    Comment by Szindbad — 2009.10.13. @ 20:20

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress