我想在select语句中重用映射。 我无法将序列转换为列表,数组等,因为查询在带有odata的web api中使用,如果odata查询只需要一个页面,我不想提取所有数据。
目前我正在使用表达式来提取映射
Expression<Func<Event, EventModel>> EventToEventModelExpression = ...
var events = (DbContext.Events
.Where(...)
.Select(EventToEventModelExpression));
但我不知道如何使用它来选择包含EventModel
类型属性的对象
例如
(from evt in DbContext.Events
where evt.Business.Id == CurrentBusinessId
let orders = DbContext.OrderItems.Where(oi => oi.EventId == evt.Id)
select new
{
Event = ??? // how can I apply mapping by using expression
TicketSold = orders.Count()
})
现在我将Event放到IQueryable并使用Select然后使用FirstOrDefault。
(from evt in DbContext.Events
where evt.Business.Id == CurrentBusinessId
let orders = DbContext.OrderItems.Where(oi => oi.EventId == evt.Id)
select new
{
Event = new[] { evt }.AsQueryable(),
TicketSold = orders.Count()
}))Select(x => new
{
Event = x.Event.Select(exp).FirstOrDefault(),
...
}
还有其他方法来执行此操作吗?创建数组并将其转换为IQuryable看起来很奇怪,但我没有找到其他方法。