我想创建一个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();