【问题标题】:Issue from SQL query case statement to a linq extension methods in C#从 SQL 查询案例语句到 C# 中的 linq 扩展方法的问题
【发布时间】:2019-03-08 22:10:33
【问题描述】:

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

此查询返回用户输入的最后一个 id,并将返回一个材料 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 查询无法正常工作是返回 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;
}

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

【问题讨论】:

  • 我会使用 TOP 1 和 s.Id 的顺序,而不必在 where 子句中再次查询。
  • 你好,肖恩·兰格,前 1 名效果更好,谢谢,但是要将我的查询转换为扩展方法或 linq,你有一个例子吗?
  • 我更新了查询示例以使用前 1 并按 id 排序,但再次将其编写为扩展方法或 linq
  • 我更新了我的正文描述忘记添加我写的用于翻译 sql 查询的 c# linq 查询扩展
  • 我能够解决我的问题,并且能够基于我的 SQL 查询创建 linq 扩展方法,谢谢。

标签: sql-server linq c#-4.0 extension-methods


【解决方案1】:

我能够使用 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;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多