Asp.net web api 返回与查询选项不同的odata IQueryable对象
我需要让下面的代码工作Asp.net web api 返回与查询选项不同的odata IQueryable对象,asp.net-web-api,odata,Asp.net Web Api,Odata,我需要让下面的代码工作 public IQueryable<BankingDTO> Get(ODataQueryOptions<TillSummaryDTO> options) { return((IQueryable<BankingDTO>)options.ApplyTo(this._bankingService.GetBanking())); } 您希望实现的场景是,您有一个
public IQueryable<BankingDTO> Get(ODataQueryOptions<TillSummaryDTO> options)
{
return((IQueryable<BankingDTO>)options.ApplyTo(this._bankingService.GetBanking()));
}
您希望实现的场景是,您有一个要查询的TillSummaryDTO实体集,并且希望返回类型是BankingDTO的集合。通过将URL中的查询选项应用于TillSummaryDTO,可以执行BankingDTO的查询。但是BankingDTO和TillSummaryDTO是不同类型的,这一事实使得用一个简单的Get操作方法不可能实现这一点,对吗 OData协议的函数特性可以更好地解决这种情况,该函数将TillSummaryDTO集合作为输入参数,具有一些内部复杂的逻辑来查询正确的BankingDTO,并返回BankingDTO而不是TillSummaryDTO 对于OData协议中的功能概念,您可以参考V4和V3的“10.4.2.功能”部分 对于实现,可以参考Web API OData V4,也可以参考Web API OData V3
var query = from t in _tillSummaryRepository.Table
join w in _workStationRepository.Table on t.TillOpID equals w.WorkstationID
join s in _storeRepository.Table on w.StoreID equals s.StoreID
join v in _venueRepository.Table on s.VenueID equals v.VenueID
select new TillSummaryDTO
{
TillOpID = t.TillOpID,
Cash = t.Cash,
Workstation = new WorkstationDTO()
{
WorkstationID = w.WorkstationID,
Name = w.Name,
Store = new StoreDTO()
{
StoreID = s.StoreID,
StoreGroup = s.StoreGroup,
Name = s.Name,
Venue = new VenueDTO()
{
VenueID = v.VenueID,
VenueGroup = v.VenueGroup,
Name = v.Name,
}
}
}
};
return query.GroupBy(x => x.Workstation.Name)
.Select(x => new BankingDTO()
{
TotalCash = x.Sum(y => y.Cash),
WorkstationName = x.Key
});