C# Can';无法使用AsyncEntitySetController为单个OData实体获取$expand

C# Can';无法使用AsyncEntitySetController为单个OData实体获取$expand,c#,asp.net-web-api,async-await,odata,C#,Asp.net Web Api,Async Await,Odata,我无法在单个实体上使用$expand,但它在集合上运行良好。我有以下异步OData Web API控制器: public class AuthorController : AsyncEntitySetController<Author, int> { private readonly IAuthorRepository _AuthorRepo = new AuthorRepository(); // GET odata/<controller>

我无法在单个实体上使用$expand,但它在集合上运行良好。我有以下异步OData Web API控制器:

public class AuthorController : AsyncEntitySetController<Author, int>
{
    private readonly IAuthorRepository _AuthorRepo = new AuthorRepository();

    // GET odata/<controller>
    [Queryable]
    public override async Task<IEnumerable<Author>> Get()
    {
        var authors = await _AuthorRepo.GetAll();
        return authors.AsQueryable();
    }

    // GET odata/<controller>/5
    [Queryable]
    public async Task<Author> Get([FromODataUri]int key)
    {
        var author = await _AuthorRepo.GetById(key);
        return author;
    }
}
public类AuthorController:AsyncEntitySetController工作,通过?$expand=books扩展作者的书籍也是如此

但是,尝试使用上面的Get方法扩展单个实体,该方法通过?$expand=Books接受关键参数,会产生以下错误:

找到多个与请求匹配的操作:Get on type AcmeApi.Controllers.AuthorsController获取类型 AcmeApi.Controllers.authorscontroller

在阅读的答案后,我尝试通过将我的第二个Get方法更新为返回SingleResult:

[Queryable]
public SingleResult<Account> Get([FromODataUri]int key)
{
    return SingleResult.Create<Account>(m_AccountRepo.GetById(key));
}
[可查询]
公共单结果获取([FromODataUri]int-key)
{
返回SingleResult.Create(m_AccountRepo.GetById(key));
}
但这会导致以下编译错误:

参数1:无法从转换 “System.Threading.Tasks.Task”到 “System.Linq.IQueryable”

异步GetById存储库方法是:

public async Task<Author> GetById(int id)
{
    return await Task.Run(() => _Authors.Where(a => a.Id == id).SingleOrDefault());
}
public异步任务GetById(int-id)
{
返回wait Task.Run(()=>_Authors.Where(a=>a.Id==Id.SingleOrDefault());
}
如果返回SingleResult是让$expand为单个实体工作的方法,那么从异步控制器执行此操作的正确方法是什么?

重命名
get([FromOdataUri]int key)
GetAuthor([]int)
可以解决此问题。
请参阅此帖子: