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作为字符串来使用。
您可以使用条件运算符:
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)");
动态LINQ表达式方法和关键字概述。
这个问题有点老,但很有趣。
Tim让我们朝着正确的方向前进:我们可以使用嵌套的iif语句来像case语句一样工作。
我的工作示例:我想先按有需求的项目和工人订购,然后按只有需求的项目订购,然后再按只有工人的项目订购:
iif(Workers.Count > 0 AND Demands.Count > 0, 3, iif(Demands.Count > 0, 2, iif(Workers.Count > 0, 1 , 0)))