C# 如何在linq select语句中重用映射

C# 如何在linq select语句中重用映射,c#,linq-to-entities,mapping,C#,Linq To Entities,Mapping,我想在select语句中重用映射。 我无法将序列转换为列表、数组等,因为查询在odata的web api中使用,如果odata查询只需要一个页面,我不想提取所有数据 目前我正在使用表达式来提取映射 Expression<Func<Event, EventModel>> EventToEventModelExpression = ... var events = (DbContext.Events .Where(...)

我想在select语句中重用映射。 我无法将序列转换为列表、数组等,因为查询在odata的web api中使用,如果odata查询只需要一个页面,我不想提取所有数据

目前我正在使用表达式来提取映射

Expression<Func<Event, EventModel>> EventToEventModelExpression = ...


var events = (DbContext.Events
                .Where(...)
                .Select(EventToEventModelExpression));
现在,我将事件置于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(),
            ...
        }
有没有其他方法来完成这个任务?创建数组并将其转换为iquirable看起来很奇怪,但我没有找到其他方法

(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(),
            ...
        }