Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 为什么ElementAt的异步版本不存在?_C#_.net_Entity Framework_Entity Framework 6_Iqueryable - Fatal编程技术网

C# 为什么ElementAt的异步版本不存在?

C# 为什么ElementAt的异步版本不存在?,c#,.net,entity-framework,entity-framework-6,iqueryable,C#,.net,Entity Framework,Entity Framework 6,Iqueryable,我需要随机获取一个实体,如下所示,但ElementAtAsync不存在。出现这种情况的原因是什么?解决办法是什么 var index = random.Next(maxValue:count); var song = await Context.Songs.ElementAt(index); 如果您只需要数据库中的一个元素,并且您已经有了计数,则可以执行以下操作: var index=random.Next(maxValue:count); var songQuery=wait Context

我需要随机获取一个实体,如下所示,但ElementAtAsync不存在。出现这种情况的原因是什么?解决办法是什么

var index = random.Next(maxValue:count);
var song = await Context.Songs.ElementAt(index);

如果您只需要数据库中的一个元素,并且您已经有了计数,则可以执行以下操作:

var index=random.Next(maxValue:count);
var songQuery=wait Context.Songs
.OrderyBy(x=>x.Something)
.Skip(索引)
.采取(1)
.ToListAsync();
var song=songQuery.SingleOrDefault();//这是由于上面的步骤(1)而起作用的

我不确定它为什么不存在,但解决方法如下所示

var song await = Context.Songs.OrderBy(o => o.Id)
                        .Skip(index)
                        .FirstOrDefaultAsync();

此Linq查询将产生相同的结果,但基础查询可能有点不同。

您不能在没有排序的情况下使用Take和skip。感谢您的帮助,我修复了我的示例。您也可以对此进行修改。ElementAtAsync不存在,原因与任何其他语言/框架不存在相同。收益并没有超过成本。反省一下,ElementAt可能需要多少时间?Microsoft的指导原则是,如果执行时间不超过50毫秒,则不必使其异步。这可能是您的最后一句话。@RobertHarvey我的意思是,我不确定它执行的sql查询是否与ElementAt完全相同。如果这个linq查询与ElementAt的sql查询不完全相同,那么它将产生完全相同的结果。我投了反对票,因为我不喜欢你接受@ChristoperStevenson的知识/想法,因为他的答案中有一个小错误,你回答你自己的问题。这就是为什么我对克里斯托弗的答案投了赞成票,对你的答案投了反对票,如果你接受自己的答案而不是克里斯托弗的,我会更加失望。