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.
October 12th, 2009 at 4:48 pm
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?
October 12th, 2009 at 5:07 pm
Persze, az egész, de úgyis kell az összes sor a kliensen. Ha nem így lenne, nem így oldanám meg.
October 12th, 2009 at 5:36 pm
Ok, ez nem volt beleírva a post-ba. :-)
October 13th, 2009 at 8:20 pm
Igazabol a newid() is pszeudo-random. :)