我怎样才能改变下面的代码,每次从数据库中获得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);
字符串
2vuwiymt1#
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-to-SQL,您可以简单地将ORDER BY NEWID()添加到SELECT语句中。如前所述,使用像Fisher-Yates Shuffle这样的算法可能会更好,下面是一个实现:https://stackoverflow.com/a/375446/284240
ORDER BY NEWID()
igsr9ssn2#
收藏品有多大?你能把它们全部选到内存中,然后随机选择一个集合吗?如果是这样,那么Is using Random and OrderBy a good shuffle algorithm?的Shuffle算法将是一个不错的选择。
return idb.Exam_Question_Int_Tbl .Where( e => e.Exam_Tbl_ID == exam_id ) .ToList() .Shuffle() .Take( 50 );
字符串如果不是,那么我建议使用一个按newid()(SQL Server Random Sort)排序的存储过程。我认为没有任何方法可以将C#中基于随机数生成器的表达式转换为LINQ to SQL/Entities。
newid()
wwtsj6pe3#
如果你也有同样的问题,我...
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();
型
yeotifhr4#
在Entity Framework Core 6+中,有一个新函数:EF.Functions.Random()
EF.Functions.Random()
db.Table.Where(...).OrderBy(r => EF.Functions.Random()).Take(50)
字符串这种方法的优点是它使用了数据库引擎的内部功能,并且已经在大多数数据库中实现。请参阅https://github.com/dotnet/efcore/issues/16141#issuecomment-666641607
4条答案
按热度按时间2vuwiymt1#
http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx
字符串
如果这是LINQ-to-SQL,您可以简单地将
ORDER BY NEWID()
添加到SELECT语句中。如前所述,使用像Fisher-Yates Shuffle这样的算法可能会更好,下面是一个实现:https://stackoverflow.com/a/375446/284240
igsr9ssn2#
收藏品有多大?你能把它们全部选到内存中,然后随机选择一个集合吗?如果是这样,那么Is using Random and OrderBy a good shuffle algorithm?的Shuffle算法将是一个不错的选择。
字符串
如果不是,那么我建议使用一个按
newid()
(SQL Server Random Sort)排序的存储过程。我认为没有任何方法可以将C#中基于随机数生成器的表达式转换为LINQ to SQL/Entities。wwtsj6pe3#
如果你也有同样的问题,我...
字符串
在sql-linq之后,它需要是一个LIST,所以在使用OrderBy-NewGuid-Method之前,你可能需要更改为一个列表:
型
yeotifhr4#
在Entity Framework Core 6+中,有一个新函数:
EF.Functions.Random()
字符串
这种方法的优点是它使用了数据库引擎的内部功能,并且已经在大多数数据库中实现。
请参阅https://github.com/dotnet/efcore/issues/16141#issuecomment-666641607