linq:按顺序sorting
我怎样才能改变下面的代码,每次从数据库中获得50个不同的随机数据?
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);
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);
如果这是LINQ到SQL,您可以简单地在您的SELECT语句中添加一个ORDER BY NEWID()
。
正如评论说,使用像Fisher-Yates Shuffle这样的algorithm可能会更好,下面是一个实现: https : //stackoverflow.com/a/375446/284240
collections有多大? 你可以select他们全部进入记忆,然后select一个随机集合? 如果是这样的话,Shufflealgorithm在使用Random和OrderBy是一个很好的shufflealgorithm吗? 将是一个不错的select。
return idb.Exam_Question_Int_Tbl .Where( e => e.Exam_Tbl_ID == exam_id ) .ToList() .Shuffle() .Take( 50 );
如果不是,那么我会build议一个存储过程,通过newid()
( SQL Server Random Sort )进行sorting 。 我不认为有什么方法可以将基于C#中随机数生成器的expression式转换为LINQ to SQL / Entities。
如果你有同样的问题,我有…
int Limit = 24; return (from Q in Context.table where Q.some_key == 1234 select new classDataType() { FirstAttribute = Q.FirstCol, SecondAttribute = Q.SecondCol, ThirdAttribute = Q.ThirdCol }).ToList().OrderBy(x => Guid.NewGuid()).Take(Limit).ToList();
在sql-linq之后,它需要成为一个LIST,所以在你使用OrderBy-NewGuid-Method之前,可能需要改成一个列表:
return (...-SQL-SELECT-LINQ-...) .ToList() //**** .OrderBy(x => Guid.NewGuid()).Take(Limit).ToList();