Tim*_*ter 108
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);
Run Code Online (Sandbox Code Playgroud)
如果这是LINQ-to-SQL,您只需添加一个ORDER BY NEWID()
SELECT语句即可.
正如评论所说,使用像Fisher-Yates Shuffle这样的算法可能更好,这里有一个实现:https://stackoverflow.com/a/375446/284240
tva*_*son 10
收藏有多大?你可以将它们全部选入内存然后选择随机集合吗?如果是这样,那么Shuffle算法在使用Random和OrderBy是一个很好的shuffle算法吗?将是一个不错的选择.
return idb.Exam_Question_Int_Tbl
.Where( e => e.Exam_Tbl_ID == exam_id )
.ToList()
.Shuffle()
.Take( 50 );
Run Code Online (Sandbox Code Playgroud)
如果没有,那么我建议一个按newid()
(SQL Server随机排序)排序的存储过程.我认为没有办法将基于C#中随机数生成器的表达式转换为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();
Run Code Online (Sandbox Code Playgroud)
在 sql-linq 之后,它需要是一个列表,因此在使用 OrderBy-NewGuid-Method 之前,您可能需要更改为列表:
return (...-SQL-SELECT-LINQ-...)
.ToList() //****
.OrderBy(x => Guid.NewGuid()).Take(Limit).ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48160 次 |
最近记录: |