首页 > 解决方案 > foreach OrderBy 有条件的

问题描述

如果 yy = true,我喜欢做 OrderBy。如果 yy = false,我不想做 OrderBy。有没有办法在下面显示的 foreach 语句中做到这一点。

如果 yy = true 它将执行以下操作:

     foreach (var item in data.OrderBy(a => a.SectSortOrderNo).GroupBy(x => new { x.SectId, x.SectName }))
     {
         ....
     };

如果 yy = false,它将执行以下操作:

     foreach (var item in data.GroupBy(x => new { x.SectId, x.SectName }))
     {
         ....
     };

我喜欢将它与一个条件结合起来。

我的另一个选择是带有 if 语句的 2 foreach。

先感谢您。

标签: c#

解决方案


其实很简单:

.OrderBy(a => yy ? a.SectSortOrderNo : default)

排序是稳定的.OrderBy(),这意味着您可以按常数值“排序”它们并获得与没有“排序”它们相同的顺序。

检查以下示例:

IList<int> data = new List<int> { 1, 4, 5, 2, 5, 1, 1, 7};
bool yy = true;
foreach (var v in data.OrderBy(it => yy ? it : default(int))) {
    Console.WriteLine(v);
}

这将产生预期的输出:

1
1
1
2
4
5
5
7

通过将yy变量更改为false您将保持原始顺序:

1
4
5
2
5
1
1
7

推荐阅读