Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询实体框架中的第n行_C#_Entity Framework - Fatal编程技术网

C# 查询实体框架中的第n行

C# 查询实体框架中的第n行,c#,entity-framework,C#,Entity Framework,我想从每个实体框架的表中查询一个随机行 目前我能想到的最好的解决方案是从表中获取总计数,然后使per C成为一个函数,以获取计数范围内的随机数,然后查询这个随机行数 我的问题是,我不知道如何直接查询每个实体框架的特定行数。我希望避免需要查询整个表,然后从中选择行号 或者我在这里有一个普遍的误解,有一个更简单的方法吗?这会让你进入x+1排。如果x是基于0的,那么如果x==0,那么它将得到第一行 take将指示查询获取n行。 Skipn将指示查询跳过前n行 多亏了AkashKava,很明显在EF中,

我想从每个实体框架的表中查询一个随机行

目前我能想到的最好的解决方案是从表中获取总计数,然后使per C成为一个函数,以获取计数范围内的随机数,然后查询这个随机行数

我的问题是,我不知道如何直接查询每个实体框架的特定行数。我希望避免需要查询整个表,然后从中选择行号


或者我在这里有一个普遍的误解,有一个更简单的方法吗?

这会让你进入x+1排。如果x是基于0的,那么如果x==0,那么它将得到第一行

take将指示查询获取n行。 Skipn将指示查询跳过前n行

多亏了AkashKava,很明显在EF中,您必须在应用Skip之前使用OrderBy

因为我们不关心特定的顺序,所以我们可以按如下方式进行排序

Table.OrderBy(x=>x.id).Skip(1).Take(1)
或者正如阿卡什卡瓦所指出的,你可以使用FirstOrDeafault

但是这种方法的效率要低一些

// USE THIS FOR MORE THEN 100 ROWS
var random = Math.Random(foos.Count());

var randomRecord = foos.OrderBy( x=> x.id ).Skip( random ).FirstOrDefault();

对于数据库,查询计数的开销比实际对数千条记录执行随机排序要小得多。由于RANDOM肯定没有索引,所以排序需要很长时间。因此,避免使用第一种方法,使用第二种方法是最好的。

也许这个链接会帮助你,我一周前读过这个链接:[[1]:@CMinor,这是一种非常低效的方法,相反,运行Count会减少开销。我认为这不是@Sven所需要的。他希望能够从数据库中随机获取一行,而无需首先查询它的行数。在使用Skip和Take之前,您必须使用OrderBy。此外,您不需要,Take,您可以简单地执行Skipx.FirstOrDefault@AkashKava你不必先OrderBy,因为他需要一个随机数,没有理由拥有一个静态资源。你是对的,我可以使用FirstOrDefault。@jyparask,阅读MSDN上的文档,Skip没有OrderBy就不能工作,不要传播你的一半知识。@BenM据我所知,我的问题是我不知道怎么做o直接查询每个实体框架的某个行号。我想防止我需要查询整个表,然后从中选择行号。这意味着他不想为了选择一行而获取所有数据。他已经声明他已经有了生成随机数的函数。对于如何工作,MSDN不感兴趣“我没有提供太多的信息。SqlFunctions.Rand是否确定表中的行数并基于此返回一个随机数?或者它是否以其他方式工作?@BenM,这只是数学问题。random在SQL自己的random版本中,您可以查找t-SQL等效的random,它的效率低于上一个答案。@BenM每一行都将得到它。”一个介于0和1之间的随机浮点数。因此,如果按此顺序排序,您将得到一个随机顺序。@AkashKava我好奇的是,我创建了一个测试项目,并将以下foreach变量t放入ve.Table_1.OrderByx=>System.Data.Objects.SqlClient.SqlFunctions.Rand Console.writelineev.HTMLText;。每次运行它时,它都给了我相同的顺序。Tho呃,您的代码似乎应该可以工作。@AkashKava我在SQL方面不是最棒的。当我有一个包含10万行的表时,这是否仍然及时有效?
// DO NOT USE THIS FOR MORE THEN 100 ROWS
var randomRecord = foos.OrderBy( x=> SqlFunctions.Rand() ).FirstOrDefault();
// USE THIS FOR MORE THEN 100 ROWS
var random = Math.Random(foos.Count());

var randomRecord = foos.OrderBy( x=> x.id ).Skip( random ).FirstOrDefault();