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

本文关键字:版本 异步 不存在 ElementAt 为什么 | 更新日期: 2023-09-27 18:01:24

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

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

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

如果您只需要数据库中的一个元素,并且您已经有了计数,您可以这样做:

var index = random.Next(maxValue:count);
var songQuery = await Context.Songs
                             .OrderyBy(x => x.Something) 
                             .Skip(index)
                             .Take(1)
                             .ToListAsync();
var song = songQuery.SingleOrDefault(); // this works due to the Take(1) above

我不知道为什么它不存在,但一个解决方案可以像下面这样。

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

这个Linq查询将导致相同的结果,但是底层查询可能有点不同。