Search code examples
c#linqrandom

linq: order by random


How can I change below code, to each time get 50 different random data from database?

return (from examQ in idb.Exam_Question_Int_Tbl
      where examQ.Exam_Tbl_ID==exam_id
      select examQ).OrderBy(x=>x.Exam_Tbl_ID).Take(50);

Solution

  • http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx

    return (from examQ in idb.Exam_Question_Int_Tbl
          where examQ.Exam_Tbl_ID==exam_id
          select examQ).OrderBy(x => Guid.NewGuid()).Take(50);
    

    If this is LINQ-to-SQL you could simply add a ORDER BY NEWID() to your SELECT statement.

    As commented it might be better to use an algorithm like Fisher-Yates Shuffle, here is an implementation: https://stackoverflow.com/a/375446/284240