簡體   English   中英

LINQ Lambda表達式不起作用

[英]The LINQ lambda expression not working

我有下面的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.

我的代碼出了什么問題?

代替

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

采用:

queue = queue.OrderBy(orderByLambda);

關於代碼的兩個注意事項:

  1. LINQ to Entities(實體框架)希望將查詢轉換為SQL,因此它只能執行知道如何轉換的操作。 例如,您不能使用最常見的LINQ收集方法,例如Contains等。
  2. 您已經定義了一個拉姆達對象,但實際表現沒有什么,用於排序-或者至少,你還沒有告訴我們什么nullCheckExpressionparameterExpression是。 總的來說,這不是您將LINQ排序為實體的方式-應該類似於queue.OrderBy(f => fx).ThenBy(f => fy); -您必須定義選擇中的哪些字段實際用於排序。 (請參閱第1點)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM