如何在linq中使用异步



我想创建一个LINQ async

public async Task<IEnumerable<object>> Joins()
{
    var joined = from post in _Posts
                 from commint in _Commints
                 where post.Id == commint.PostId
                 select new
                 {
                     postId = post.Id,
                     commintId = commint.Id,
                     post = post.Body,
                     post.Title,
                     CommintEmail = commint.Email,
                     commint = commint.Body
                 };
    return await joined;   
}

所有数据都成功返回(当我删除async和await时),但我的目标是使函数异步

如果你只有一个项目列表(没有上下文),你可以尝试这个算法

public async Task<IEnumerable<object>> Joins()
{
    return await Task<IEnumerable<object>>.Run(()=> (from post in _Posts
                         from commint in _Commints
                         where post.Id == commint.PostId
                         select new
                         {
                             postId = post.Id,
                             commintId = commint.Id,
                             post = post.Body,
                             post.Title,
                             CommintEmail = commint.Email,
                             commint = commint.Body
                         }).ToList()
            );
}

但这对我来说没有多大意义。

如果你使用net core EF试试这个(经典的net EF没有async操作符,所以你只能像上面那样使用标准算法Task.Run()编写自定义代码):

return await  (from post in  _context.Posts
                 join commint in _context.Commints
              on post.Id equals commint.PostId
                         
                         select new
                         {
                             postId = post.Id,
                             commintId = commint.Id,
                             post = post.Body,
                             post.Title,
                             CommintEmail = commint.Email,
                             commint = commint.Body
                         }).ToListAsync();
         

最新更新