从 SQL query case 语句到 C# 中的 linq 扩展方法

Issue from SQL query case statement to a linq extension methods in C#

我需要以下 SQL 查询的帮助,以便在 linq 或扩展方法查询中编写,如果两者都可以提供这两个示例,那将对我来说很好。

此查询是 return用户输入的最后一个 ID,并将 return 一个 material 我需要的 ID,我的 C# 程序将使用它。

SELECT TOP 1
    CASE  
       WHEN s.Material = 'P4861VAPF' THEN 4578
       WHEN s.Material = 'P2871VAPF' THEN 4579
       WHEN s.Material = 'P2231VAPF' THEN 4580
       ELSE NULL 
    END AS MaterialSelected
FROM
    dbo.Shipments s
WHERE
    s.material <> ''
ORDER BY
    s.Id

我用 C# 编写了这个 linq 扩展方法来重新创建我的 SQL 查询不能正常工作是 return Id 而不是我的 select case 语句

public int GetLastShipmentMaterialEntry()
{
    var lastShipmentMaterialEntry = BarcodeReceivingDbContext.Shipments
            .Where(s => s.Material != "")
            .OrderBy(s => s.Id)
            .Select(s =>
                s.Material == "P4861VAPF" ? 4578 :
                s.Material == "P2871VAPF" ? 4579 :
                s.Material == "P2231VAPF" ? 4580 : 0)                
            .FirstOrDefault();

    return lastShipmentMaterialEntry;
}

我在堆栈溢出和 google 中看到了来自其他问题的其他查询示例,但不完全符合我当前的查询。我也尝试使用 linqpad 看看它是否可以翻译它但没有运气所以任何帮助都不胜感激。

我能够使用 Linq 扩展方法重新创建我的 SQL 查询,如果有人认为并看到更好的解决方案,请告诉我。

        public int GetLastShipmentMaterialEntry()
        {
            var lastShipmentMaterialEntry = BarcodeReceivingDbContext.Shipments
                .Where(s => s.Material != "")
                .OrderByDescending(s => s.Id)
                .Select(s =>
                    s.Material == "P4861VAPF" ? 4578 :
                    s.Material == "P2871VAPF" ? 4579 :
                    s.Material == "P2231VAPF" ? 4580 : 0)               
                .FirstOrDefault();

            return lastShipmentMaterialEntry;
        }