【发布时间】: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