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

时间:2014-05-03 15:57:53

标签: c# .net entity-framework entity-framework-6 iqueryable

我需要随机获取一个实体,如下所示,但ElementAtAsync不存在。这是什么原因以及什么是解决方法?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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