C#Dynamic Linq - 案例陈述

Ria*_*ert 1 c# dynamic-linq

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

Tim*_*ter 5

您可以使用条件运算符:

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表达式方法和关键字概述.