我在使用Dynamic Linq时遇到了一些麻烦,我希望有人可以提供帮助.我面临的问题是我需要按特定顺序排序列表.在SQL中我会写这个:
ORDER BY CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
我将如何使用Dynamic Linq实现这一目标?
我尝试过类似的东西:
listToSort.AsQueryable().OrderBy("CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END")
Run Code Online (Sandbox Code Playgroud)
但这会返回错误
类型中不存在属性或字段"CASE"
此代码在运行时作为表达式列表生成.所以我使用Dynamic Linq将这些经历用作字符串.
您可以使用条件运算符:
listToSort.AsQueryable()
.OrderBy(x => x.Blah == "blah" ? 1 : 0);
Run Code Online (Sandbox Code Playgroud)
你也可以使用它,因为a true比"a"更多false:
listToSort.AsQueryable()
.OrderBy(x => x.Blah == "blah");
Run Code Online (Sandbox Code Playgroud)
似乎在动态LINQ CASE或条件运算符不受支持.但是您可以使用另一个关键字:iif
listToSort.AsQueryable()
.OrderBy("iif(Blah = 'blah', 1, 0)");
Run Code Online (Sandbox Code Playgroud)
动态LINQ表达式方法和关键字概述.