用LINQ提取随机行思想的研究
本文关键字:LINQ 提取 随机 | 更新日期: 2023-09-27 18:17:19
这实际上是我从产品列表中提取(例如)5个随机产品的策略:
// extracts all products with Name Example
IList<Product> products = (from Product p in new Products()
where p.Name = "Example"
select p).ToList();
// I randomly order first 5 products
int upper = 1;
if (products.Count > 1)
{
Random r = new Random();
upper = Math.Min(5, products.Count);
for (int i = 0; i < upper; i++)
{
int randInd = r.Next(i, products.Count);
var temp = products[i];
products[i] = products[randInd];
products[randInd] = temp;
}
}
// I get the first 5
products = products.Take(upper);
我不得不说:每次我用LINQ提取我需要的所有记录时,我都很恼火,订购它们,只得到很少的。
我认为这个过程是在浪费资源,比如如果我只需要5个元素,就用LINQ取所有元素。
是否有一种方法来提取与LINQ只记录在表中的某些位置?我的意思是,如果我有一个1000行的表,只随机得到5行。
这将是相同的,并且资源的使用将得到改善。
是否有一种方法可以使用LINQ只提取某些位置的记录在桌子上?
System.Linq.Queryable类提供了ElementAt(int)扩展方法
我将给你一个很好的概念,通过使用Linq从MSSQL服务器提取随机的5条记录。首先在数据库中创建一个标量值函数,如下所示
CREATE FUNCTION GetNewId ( )
RETURNS uniqueidentifier
AS
BEGIN
RETURN (SELECT ID FROM RandomView)
END
请在您的LINQ dbml文件中导入此函数。
现在当你使用linq查询从数据库中获取记录时,你将使用
(from p in new ProductsDataContext()
orderby new ProductsDataContext().GetNewId()
select p).Take(5).ToList();
通过使用此查询,您可以在每次呼叫中获得5条随机记录…