|
4 | 4 | // Created by: Alexis Kochetov |
5 | 5 | // Created: 2009.05.06 |
6 | 6 |
|
7 | | -using System; |
8 | | -using System.Collections.Generic; |
9 | | -using System.Linq; |
10 | 7 | using System.Linq.Expressions; |
11 | 8 | using Xtensive.Core; |
12 | 9 | using Xtensive.Orm.Rse.Providers; |
13 | 10 |
|
14 | 11 | namespace Xtensive.Orm.Linq.Expressions.Visitors |
15 | 12 | { |
16 | | - internal sealed class ColumnGatherer : PersistentExpressionVisitor |
| 13 | + internal sealed class ColumnGatherer(ColumnExtractionModes columnExtractionModes) : PersistentExpressionVisitor |
17 | 14 | { |
18 | | - private readonly ColumnExtractionModes columnExtractionModes; |
19 | 15 | private readonly List<(ColNum, Expression)> columns = new(); |
20 | 16 | private SubQueryExpression topSubquery; |
21 | 17 |
|
@@ -61,13 +57,15 @@ public static IReadOnlyList<ColNum> GetColumns(Expression expression, ColumnExtr |
61 | 57 | { |
62 | 58 | var gatherer = new ColumnGatherer(columnExtractionModes); |
63 | 59 | gatherer.Visit(expression); |
64 | | - var distinct = gatherer.DistinctValues |
65 | | - ? gatherer.columns.Select(p=>p.Item1).Distinct() |
66 | | - : gatherer.columns.Select(p=>p.Item1); |
67 | | - var ordered = gatherer.OrderedValues |
68 | | - ? distinct.OrderBy(i => i) |
69 | | - : distinct; |
70 | | - return ordered.ToArray(); |
| 60 | + var columns = gatherer.columns.Select(p => p.Item1); |
| 61 | + if (gatherer.DistinctValues && gatherer.OrderedValues) { |
| 62 | + columns = new SortedSet<ColNum>(columns); |
| 63 | + } |
| 64 | + else { |
| 65 | + columns = gatherer.DistinctValues ? columns.Distinct() : columns; |
| 66 | + columns = gatherer.OrderedValues ? columns.OrderBy(i => i) : columns; |
| 67 | + } |
| 68 | + return columns.ToArray(); |
71 | 69 | } |
72 | 70 |
|
73 | 71 | internal override Expression VisitMarker(MarkerExpression expression) |
@@ -234,12 +232,5 @@ internal override Expression VisitFullTextExpression(FullTextExpression expressi |
234 | 232 | VisitColumnExpression(expression.RankExpression); |
235 | 233 | return expression; |
236 | 234 | } |
237 | | - |
238 | | - // Constructors |
239 | | - |
240 | | - private ColumnGatherer(ColumnExtractionModes columnExtractionModes) |
241 | | - { |
242 | | - this.columnExtractionModes = columnExtractionModes; |
243 | | - } |
244 | 235 | } |
245 | 236 | } |
0 commit comments