LINQ选择新的Async / Await

时间:2016-03-10 11:22:22

标签: c# .net linq asynchronous async-await

我目前有一个异步查询,如下所示,这很好,允许我使用FirstOrDefaultAsync / ToListAsync方法。

 public async Task<X> FindXAsync(int x)
 {
      var q = from c in context.X
              where c.Id == x
              select c;

      return await q.FirstOrDefaultAsync();
 }

但是我试图将该查询扩展为选择新类

public async Task<XClass> FindXAsync(int x)
{
     var q = from c in context.X
            where c.Id == x
            select new XClass (
            c.Id,c.Header .........
            );

     return await q.FirstOrDefaultAsync();
}

对于上面你不能再使用FirstOrDefaultAsync()只能使用FirstOrDefault(),我想知道将这个功能变成异步方法的最有效方法是什么。 谢谢, 克里斯

2 个答案:

答案 0 :(得分:3)

在这种情况下,最简单的答案可能只是进行(异步)第一次选择,然后创建所需的类型:

public async Task<XClass> FindXAsync(int x)
{
  var q = from c in context.X
          where c.Id == x
          select c;
  var c = await q.FirstOrDefaultAsync();
  return new XClass (
           c.Id,c.Header .........
  );
}

答案 1 :(得分:1)

尝试使用泛型类型参数:

return await q.FirstOrDefaultAsync<XClass>();