C#动态Linq-案例说明

本文关键字:说明 案例 Linq- 动态 | 更新日期: 2023-09-27 18:20:35

我在使用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"

此代码在运行时作为表达式列表生成。所以我使用DynamicLinq将expessions作为字符串来使用。

C#动态Linq-案例说明

您可以使用条件运算符:

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

动态LINQ表达式方法和关键字概述。

这个问题有点老,但很有趣。

Tim让我们朝着正确的方向前进:我们可以使用嵌套的iif语句来像case语句一样工作。

我的工作示例:我想先按有需求的项目和工人订购,然后按只有需求的项目订购,然后再按只有工人的项目订购:

iif(Workers.Count > 0 AND Demands.Count > 0, 3, iif(Demands.Count > 0, 2, iif(Workers.Count > 0, 1 , 0)))