簡體   English   中英

如何修復“帶有語句主體的lambda表達式無法轉換為表達式樹”以供sql執行?

[英]How to fix "A lambda expression with a statement body cannot be converted to an expression tree” for sql for execution?

我必須對嵌套表中的數據對“報告”表進行排序。 也就是說,每個報表項都具有與之關聯的多個網絡,並且每個網絡都有一個狀態屬性,我需要對該狀態屬性進行排序。 這是到目前為止我所能獲得的示例,但是我很難以IOrderedQueryable可以接受的方式編寫此代碼,因為我仍然需要將其翻譯成SQL並通過該代碼執行比我在哪里寫代碼:

var orderedReports = reports.OrderBy((r) =>
{
    switch (r.Nets.Any(n => n.Status.Contains("New")) ? "New" :
            r.Nets.Any(n => n.Status.Contains("Updated")) ? "Updated" :
            r.Nets.Any(n => n.Status.Contains("Ignored")) ? "Ignored" : "None" )
    {
        case "New": return 1;
        case "Updated": return 2;
        case "Ignored": return 3;
        case "None": return 4;
        default: return 5;
    }
}).ThenBy(r => r.ReportID); 

我意識到許多報告可能具有相似甚至匹配的狀態數,因此在進行初始排序之后,我將根據該報告的ID進行排序。 我基本上希望所有報告都至少具有一個“新”狀態,然后再按其他說明進行操作。 我還想重申一下,我需要確保它保留在IOrderedQueryable中,因為在對數據庫進行查詢時需要在SQL中執行此操作。

看起來switch語句沒有SQL等價物,它期望在Linq to Objects中運行它。

看來條件運算符可以直接轉換: https : //www.codeproject.com/Articles/38264/How-to-Create-T-SQL-CASE-Statements-With-LINQ-To-S

我強烈建議在LinqPad中進行測試,因為它可以產生等效的SQL,以幫助您進行調試。

暫無
暫無

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

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