在我的OData控制器中,我使用的是here找到的通用存储库,可以执行以下操作:
[Queryable]
public Task<IQueryable<ContentType>> Get()
{
var result = _repository.Query().GetAsync();
return result;
}
我想在查询中添加一些条件,例如UserId
并使用UnitOfWork
模式,
我正在尝试以下方法:
[Queryable]
public Task<IQueryable<ContentType>> Get()
{
// mock
var userId = 111;
var unitOfWork = new Repository.UnitOfWork(_db);
var result = unitOfWork.Repository<ContentType>().Query().Get()
.Where(u => u.UserId == userId).Cast<ContentType>() // <-- how to access .GetAsync()
return result;
}
我尝试了以下(有效),但想知道这是否是实现此目的的最佳方式?
[Queryable]
public async Task<IQueryable<ContentType>> Get()
{
// mock
var userId = 102;
var unitOfWork = new Repository.UnitOfWork(_db);
var result = unitOfWork.Repository<ContentType>().Query().Get()
.Where(u => u.UserId == userId).Cast<ContentType>().AsQueryable();
return await Task.Factory.StartNew(() => result);
}
- 更新 -
根据讨论,我删除了此异步部分,并完成以下操作:
public IEnumerable<ContentType> Get(ODataQueryOptions<ContentType> options)
{
var unitOfWork = new Repository.UnitOfWork(_db);
// mock
var userId = 102;
var contentTypes = options.ApplyTo(unitOfWork.Repository<ContentType>().Query().Get()
.Where(u => u.UserId == userId)
.OrderBy(c => c.Description))
.Cast<ContentType>().ToList();
return contentTypes;
}
我并没有停留在执行此异步,并且似乎没有从.GetAsync()
(如IReqpositoryQuery.cs中定义)IQueryable<TEntity>
的直接方式,但很想知道一种实现这一目标的正确方法。
答案 0 :(得分:1)
您需要使用Filter
的{{1}}方法,而不是使用IRepositoryQuery
:
Where