我在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")
但这会返回错误
没有财产或字段' CASE'存在于
类型中
此代码在运行时作为表达式列表生成。 所以我使用Dynamic Linq将这些经历用作字符串。
答案 0 :(得分:5)
您可以使用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表达式方法和关键字。
答案 1 :(得分:0)
有点老但是有趣的问题。
Tim向我们指示了正确的方向:我们可以使用嵌套的iif语句像case语句一样工作。
我的工作示例:我想先按需求和工人的项目排序,然后按仅需求的项目排序,然后按仅工人的项目进行排序:
iif(Workers.Count > 0 AND Demands.Count > 0, 3, iif(Demands.Count > 0, 2, iif(Workers.Count > 0, 1 , 0)))