C# Dynamic Linq - 案例陈述
C# Dynamic Linq - Case Statements
我在使用 Dynamic Linq 时遇到了一些问题,我希望有人能提供帮助。我面临的问题是我需要按特定顺序订购列表。在 SQL 中,我会这样写:
ORDER BY CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END
我如何使用 Dynamic Linq 完成此操作?
我尝试过类似的方法:
listToSort.AsQueryable().OrderBy("CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END")
但是这个returns一个错误
No property or field 'CASE' exists in type
此代码在运行时作为表达式列表生成。
所以我使用 Dynamic Linq 将表达式用作字符串。
您可以使用 conditional operator:
listToSort.AsQueryable()
.OrderBy(x => x.Blah == "blah" ? 1 : 0);
您也可以使用它,因为 true
比 false
:
"more"
listToSort.AsQueryable()
.OrderBy(x => x.Blah == "blah");
似乎不支持动态 LINQ CASE
或条件运算符。但是您可以使用另一个关键字:iif
listToSort.AsQueryable()
.OrderBy("iif(Blah = 'blah', 1, 0)");
Overview 的动态 LINQ 表达式方法和关键字。
有点老但很有趣的问题。
Tim 给我们指明了正确的方向:我们可以使用嵌套的 iif 语句来像 case 语句一样工作。
我的工作示例:我想先按有需求和工人的项目排序,然后按只有需求的项目排序,然后按只有工人的项目排序:
iif(Workers.Count > 0 AND Demands.Count > 0, 3, iif(Demands.Count > 0, 2, iif(Workers.Count > 0, 1 , 0)))
我在使用 Dynamic Linq 时遇到了一些问题,我希望有人能提供帮助。我面临的问题是我需要按特定顺序订购列表。在 SQL 中,我会这样写:
ORDER BY CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END
我如何使用 Dynamic Linq 完成此操作?
我尝试过类似的方法:
listToSort.AsQueryable().OrderBy("CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END")
但是这个returns一个错误
No property or field 'CASE' exists in type
此代码在运行时作为表达式列表生成。 所以我使用 Dynamic Linq 将表达式用作字符串。
您可以使用 conditional operator:
listToSort.AsQueryable()
.OrderBy(x => x.Blah == "blah" ? 1 : 0);
您也可以使用它,因为 true
比 false
:
listToSort.AsQueryable()
.OrderBy(x => x.Blah == "blah");
似乎不支持动态 LINQ CASE
或条件运算符。但是您可以使用另一个关键字:iif
listToSort.AsQueryable()
.OrderBy("iif(Blah = 'blah', 1, 0)");
Overview 的动态 LINQ 表达式方法和关键字。
有点老但很有趣的问题。
Tim 给我们指明了正确的方向:我们可以使用嵌套的 iif 语句来像 case 语句一样工作。
我的工作示例:我想先按有需求和工人的项目排序,然后按只有需求的项目排序,然后按只有工人的项目排序:
iif(Workers.Count > 0 AND Demands.Count > 0, 3, iif(Demands.Count > 0, 2, iif(Workers.Count > 0, 1 , 0)))