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

时间:2014-03-26 08:17:07

标签: c# linq-to-entities mapping

我想在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看起来很奇怪,但我没有找到其他方法。

0 个答案:

没有答案