用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提取随机行思想的研究

是否有一种方法可以使用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条随机记录…