【问题标题】:Custom Sort in C# LINQ with LAMBDA使用 LAMBDA 在 C# LINQ 中自定义排序
【发布时间】:2019-09-23 18:19:31
【问题描述】:

即使认为还有另一个标题相似的主题,我还是搜索了一个更通用的答案。

我有一个 SQLSERVER 查询来选择带有自定义 Order By 子句的 userId。像这样的:

SELECT userID
FROM users
WHERE userName like '%whatever%'
ORDER BY 
 CASE
  WHEN UserID = 123 THEN 0
  WHEN UserID = 456 THEN 1
  WHEN UserID = 789 THEN 2
  ELSE 3
 END ASC,
 UserID

那么,我如何复制相同的Order By 结构,但在 C# 中使用带有 LAMBDA 的 LINQ?

到目前为止,这是我的代码:

var userID = db.User.Where(x => x.userName.Contains("whatever").OrderBy(x => x.userID).Select(x => x.userID).ToList();

【问题讨论】:

    标签: c# sql-server linq lambda


    【解决方案1】:
    ORDER BY 
     CASE
      WHEN UserID = 123 THEN 0
      WHEN UserID = 456 THEN 1
      WHEN UserID = 789 THEN 2
      ELSE 3
     END ASC,
     UserID
    

    在功能上等同于这个 Lambda

    .OrderBy(_ => _.userID == 123 ? 0 : _.userID == 456 ? 1 : _.userID == 789 ? 2 : 3)
    .ThenBy(_ => _.userID)
    

    【讨论】:

    • 这不会严重依赖他们知道预期的值吗?如果这只是一个示例查询,并且它们的工作环境中的值可能不同,那么这将不起作用。
    • 我知道我想要在排序之上获得的值。我不需要也不需要知道排序的后续值。
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多