C#Dynamic Linq - 案例陈述

时间:2015-11-05 10:19:19

标签: c# dynamic-linq

我在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将这些经历用作字符串。

2 个答案:

答案 0 :(得分:5)

您可以使用conditional operator

listToSort.AsQueryable()
    .OrderBy(x => x.Blah == "blah" ? 1 : 0); 

您也可以使用此功能,因为truefalse“更多”:

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)))