LINQ lambda表达式不起作用

时间:2015-05-12 13:54:08

标签: c# linq lambda expression

我有以下Linq表达式

var orderByLambda = Expression.Lambda<Func<Queue, int>>(
    nullCheckExpression, parameterExpression);

queue = context.Table
    .Join(context.tablea, cq => cq.a, r => r.a, (cq, r) => new { cq, r })
    .Join(context.tableb, s => s.r.b, se => se.b, (s, se) => new { s, se })
    .Join(context.tablec, u => u.s.cq.c, us => us.c, (u, us) => new { u, us })
    .Where(cq => cq.u.s.cq.c == Utilities.Authentication.c)
    .Where(cq => buildStatusOrder.Contains((BuildStatusEnum)cq.u.s.cq.d))
    .OrderBy(o => o.u.se.b)
    .Select(s => new QueueInfo
    {
        x = s.u.c,
        y = s.u.d,
        z = s.u.a
    });

queue = queue.OrderBy(f => orderByLambda);

var concat = queue.GroupBy(e => new { e.x, e.y, e.z })
    .OrderBy(v => v.FirstOrDefault().segmentID)
    .ToList()
    .Select(ss => new QueueInfo
    {
        x = ss.x,
        y = ss.y,
        z = ss.z,
    })
    .AsQueryable();

我在concat

中遇到错误
The LINQ expression node type 'Lambda' is not supported in LINQ to Entities.

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:3)

而不是

queue = queue.OrderBy(f => orderByLambda);

使用:

queue = queue.OrderBy(orderByLambda);

答案 1 :(得分:0)

关于代码的两点说明:

  1. LINQ to Entities(实体框架)希望将您的查询转换为SQL,因此它只能执行它知道如何翻译的操作。例如,您无法使用最常见的LINQ收集方法,例如Contains等。
  2. 您已经定义了一个lambda对象,但没有定义用于排序的实际表达式 - 或者至少,您还没有向我们展示nullCheckExpression和{ {1}}。一般来说,这不是你如何对LINQ to Entities进行排序 - 它应该类似parameterExpression - 你必须定义select中哪些字段实际用于排序。 (见第1点)