簡體   English   中英

.NET 核心運行時錯誤:LINQ 表達式無法翻譯

[英].NET Core runtime error: LINQ expression could not be translated

我最近經常遇到這個問題。 我還在 Stack Overflow 上找到了幾篇關於它的帖子,但沒有一個真正能夠回答導致此錯誤的根本問題以及如何修復它。

這很令人沮喪。 我在 Visual Studio 中創建了一個 LINQ 查詢。 當我在 LINQ Pad 中測試它時,它工作得很好。 它編譯沒有錯誤。 但是在運行時,它會崩潰並出現以下錯誤:

System.InvalidOperationException:'無法翻譯 LINQ 表達式 [...]。 以可翻譯的形式重寫查詢,或通過插入對 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的調用顯式切換到客戶端評估。

該錯誤表明您可以在執行查詢時使用.AsEnumerable().ToList()解決問題。 問題是,我構建的幾乎每個 LINQ 查詢都使用.ToList().ToListAsync()

我知道在客戶評估方面存在績效問題。 但是使用跨越多個數據庫表的多層邏輯執行復雜查詢是 LINQ 最擅長的。 由於無法解釋問題的原因而崩潰會使復雜系統的開發變得更加困難。

有沒有其他人發現這是一個反復出現的問題? 有誰知道原因是什么,如果有的話,解決方案是什么?

還是我只是錯過了什么?

這是我遇到的問題: .NET Core 3.1 LINQ 表達式無法翻譯為列表中的列表

實體框架中沒有組加入,因為這在 sql 中沒有 1 對 1 的等價物。 你有幾個選項在這里你可以 select 結果與組然后加入同一個表的結果.. 或者我們可以使用一點 memory 做一些工作寫這個袖口很難說它是否會按原樣運行但是像這樣的東西


var posts =
  (await (from x in _context.UserPosting
          where PostedByList.Contains(x.Posting.PostingId)
          && x.Approved == "A"
          && x.User.Active == true
          select new
          {
              FirstName = x.User.FirstName,
              LastName = x.User.LastName,
              UserEmail = x.User.UserId,
          }).ToListAsync()) // Force enumeration.. aka run query
  // Group here once results are in memory
  .GroupBy( e => new { FirstName = e.User.FirstName, LastName = x.User.LastName, UserId = x.User.UserId }, 
    new { FirstName = e.User.FirstName, LastName = x.User.LastName, UserId = x.User.UserId })
  .Select(e => new UserPostDTO
  {
    FirstName = e.Key.FirstName,
    LastName = e.Key.LastName,
    UserId = e.Key.UserId,
    PostsByUser = e.ToList()
  });

暫無
暫無

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

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