diff --git a/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v2_5/Compiler.cs b/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v2_5/Compiler.cs index c7696e58f..7262dfcea 100644 --- a/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v2_5/Compiler.cs +++ b/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v2_5/Compiler.cs @@ -208,7 +208,7 @@ public override void Visit(SqlFunctionCall node) switch (node.FunctionType) { case SqlFunctionType.Concat: - Visit(SqlDml.Concat(arguments.ToArray(node.Arguments.Count))); + Visit(SqlDml.Concat(arguments.ToArray())); return; case SqlFunctionType.DateTimeTruncate: Visit(SqlDml.Cast(arguments[0], new SqlValueType("Date"))); @@ -458,4 +458,4 @@ protected internal Compiler(SqlDriver driver) { } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm.MySql/Sql.Drivers.MySql/v5_0/Compiler.cs b/Orm/Xtensive.Orm.MySql/Sql.Drivers.MySql/v5_0/Compiler.cs index 9a5755549..617018df4 100644 --- a/Orm/Xtensive.Orm.MySql/Sql.Drivers.MySql/v5_0/Compiler.cs +++ b/Orm/Xtensive.Orm.MySql/Sql.Drivers.MySql/v5_0/Compiler.cs @@ -152,7 +152,7 @@ public override void Visit(SqlFunctionCall node) SqlDml.FunctionCall("TRUNCATE", arguments[0], SqlDml.Literal(0)).AcceptVisitor(this); return; case SqlFunctionType.Concat: - Visit(SqlDml.Concat(arguments.ToArray(node.Arguments.Count))); + Visit(SqlDml.Concat(arguments.ToArray())); return; case SqlFunctionType.CharLength: SqlDml.FunctionCall(translator.TranslateToString(SqlFunctionType.CharLength), node.Arguments[0]).AcceptVisitor(this); @@ -448,4 +448,4 @@ protected internal Compiler(SqlDriver driver) { } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/SqlCompiler.cs b/Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/SqlCompiler.cs index 35752368a..eeefe3c9a 100644 --- a/Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/SqlCompiler.cs +++ b/Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/SqlCompiler.cs @@ -37,7 +37,7 @@ protected override SqlProvider VisitFreeText(FreeTextProvider provider) var query = queryAndBindings.Query; var table = Mapping[realPrimaryIndex.ReflectedType]; var fromTable = SqlDml.FreeTextTable(table, searchCriteriaBinding.ParameterReference, - table.Columns.Select(column => column.Name).Append(rankColumnName).ToArray(table.Columns.Count + 1)); + table.Columns.Select(column => column.Name).Append(rankColumnName).ToArray()); var fromTableRef = SqlDml.QueryRef(fromTable); foreach (var column in query.Columns) { select.Columns.Add(fromTableRef.Columns[column.Name] ?? column); diff --git a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/ErrorMessageParser.cs b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/ErrorMessageParser.cs index 1450ed742..224bb5b5a 100644 --- a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/ErrorMessageParser.cs +++ b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/ErrorMessageParser.cs @@ -190,7 +190,7 @@ private static PreparedTemplate PrepareEnglishTemplate(string template) } CollectLastChunk(regexBuilder, template, offset); - return new PreparedTemplate(regexBuilder.ToString(), Enumerable.Range(1, count).ToArray(count)); + return new PreparedTemplate(regexBuilder.ToString(), Enumerable.Range(1, count).ToArray()); } private static PreparedTemplate PrepareNonEnglishTemplate(string template) @@ -246,4 +246,4 @@ public ErrorMessageParser(IEnumerable> messageTemplates : messageTemplates.ToDictionary(item => item.Key, item => PrepareNonEnglishTemplate(item.Value)); } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Core/AssociateProvider.cs b/Orm/Xtensive.Orm/Core/AssociateProvider.cs index 747566908..20b723a45 100644 --- a/Orm/Xtensive.Orm/Core/AssociateProvider.cs +++ b/Orm/Xtensive.Orm/Core/AssociateProvider.cs @@ -305,7 +305,7 @@ protected AssociateProvider(SerializationInfo info, StreamingContext context) typeSuffixes = (string[]) info.GetValue(nameof(typeSuffixes), typeof(string[])); var highPriorityLocationsSerializable = (List<(string, string)>) info.GetValue(nameof(highPriorityLocations), typeof(List<(string, string)>)); - highPriorityLocations = highPriorityLocationsSerializable.SelectToList(ls => (Assembly.Load(ls.Item1), ls.Item2)); + highPriorityLocations = highPriorityLocationsSerializable.Select(ls => (Assembly.Load(ls.Item1), ls.Item2)).ToList(); } /// @@ -333,7 +333,7 @@ public virtual void GetObjectData(SerializationInfo info, StreamingContext conte info.AddValue(nameof(constructorParams), constructorParamsExceptThis, constructorParams.GetType()); info.AddValue(nameof(typeSuffixes), typeSuffixes, typeSuffixes.GetType()); - var highPriorityLocationsSerializable = HighPriorityLocations.SelectToList(l => (l.Item1.FullName, l.Item2)); + var highPriorityLocationsSerializable = HighPriorityLocations.Select(l => (l.Item1.FullName, l.Item2)).ToList(); info.AddValue(nameof(highPriorityLocations), highPriorityLocationsSerializable, highPriorityLocationsSerializable.GetType()); } } diff --git a/Orm/Xtensive.Orm/Core/Extensions/CollectionExtensions.cs b/Orm/Xtensive.Orm/Core/Extensions/CollectionExtensions.cs index 6d43a8323..872fc604d 100644 --- a/Orm/Xtensive.Orm/Core/Extensions/CollectionExtensions.cs +++ b/Orm/Xtensive.Orm/Core/Extensions/CollectionExtensions.cs @@ -17,18 +17,6 @@ namespace Xtensive.Core /// public static class CollectionExtensionsEx { - /// - /// Converts collection to an array. - /// - /// The type of collection items. - /// Collection to convert. - /// An array containing all the items from the . - public static TItem[] ToArray(this ICollection source) - { - var items = new TItem[source.Count]; - source.Copy(items, 0); - return items; - } /// /// Copies the items from collection @@ -139,62 +127,6 @@ public static bool ContainsAny(this ICollection collection, IEnume return false; } - /// Projects each element of a sequence into a new form. - /// A collection of values to invoke a transform function on. - /// A transform function to apply to each element. - /// The type of the elements of . - /// The type of the value returned by . - /// An whose elements are the result of invoking the transform function on each element of . - /// - /// or is . - public static TResult[] SelectToArray( - this ICollection source, Func selector) - { - return source.Select(selector).ToArray(source.Count); - } - - /// Projects each element of a sequence into a new form by incorporating the element's index. - /// A collection of values to invoke a transform function on. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// The type of the elements of . - /// The type of the value returned by . - /// An whose elements are the result of invoking the transform function on each element of . - /// - /// or is . - public static TResult[] SelectToArray( - this ICollection source, Func selector) - { - return source.Select(selector).ToArray(source.Count); - } - - /// Projects each element of a sequence into a new form. - /// A collection of values to invoke a transform function on. - /// A transform function to apply to each element. - /// The type of the elements of . - /// The type of the value returned by . - /// An whose elements are the result of invoking the transform function on each element of . - /// - /// or is . - public static List SelectToList( - this ICollection source, Func selector) - { - return source.Select(selector).ToList(source.Count); - } - - /// Projects each element of a sequence into a new form by incorporating the element's index. - /// A collection of values to invoke a transform function on. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// The type of the elements of . - /// The type of the value returned by . - /// An whose elements are the result of invoking the transform function on each element of . - /// - /// or is . - public static List SelectToList( - this ICollection source, Func selector) - { - return source.Select(selector).ToList(source.Count); - } - /// /// Projects each element of a sequence into two elements of new form and adds it to the first or the second array respectively. /// diff --git a/Orm/Xtensive.Orm/Core/Extensions/EnumerableExtensions.cs b/Orm/Xtensive.Orm/Core/Extensions/EnumerableExtensions.cs index 06fc18695..9461b6ea4 100644 --- a/Orm/Xtensive.Orm/Core/Extensions/EnumerableExtensions.cs +++ b/Orm/Xtensive.Orm/Core/Extensions/EnumerableExtensions.cs @@ -246,7 +246,7 @@ public static T[] ToArraySafely(this IEnumerable sequence) /// The sequence element type. /// The resulting array. /// is negative. - public static T[] ToArray(this IEnumerable sequence, int length) + internal static T[] ToArray(this IEnumerable sequence, int length) { ArgumentOutOfRangeException.ThrowIfNegative(length); @@ -270,7 +270,7 @@ public static T[] ToArray(this IEnumerable sequence, int length) /// The number of elements that the new list can initially store. /// The type of the elements of . /// A that contains elements from the input sequence. - public static List ToList(this IEnumerable source, int capacity) + internal static List ToList(this IEnumerable source, int capacity) { ArgumentOutOfRangeException.ThrowIfNegative(capacity); @@ -580,7 +580,7 @@ public static List SortTopologically(this IEnumerable va if (edgeTester.Invoke(left.Value, right.Value)) new Edge(left, right); var result = TopologicalSorter.Sort(graph); - return result.HasLoops ? null : result.SortedNodes.SelectToList(node => node.Value); + return result.HasLoops ? null : result.SortedNodes.Select(node => node.Value).ToList(); } internal static IReadOnlyList ToReadOnlyList(this IEnumerable seq) => diff --git a/Orm/Xtensive.Orm/Modelling/Actions/CreateNodeAction.cs b/Orm/Xtensive.Orm/Modelling/Actions/CreateNodeAction.cs index fda5e7f1a..86b014929 100644 --- a/Orm/Xtensive.Orm/Modelling/Actions/CreateNodeAction.cs +++ b/Orm/Xtensive.Orm/Modelling/Actions/CreateNodeAction.cs @@ -102,8 +102,8 @@ protected override void PerformExecute(IModel model, IPathNode item) protected Node TryConstructor(IModel model, params object[] arguments) { if (parameters!=null) - arguments = arguments.Concat(parameters.Select(p => PathNodeReference.Resolve(model, p))).ToArray(arguments.Length + parameters.Length); - var argTypes = arguments.SelectToArray(a => a.GetType()); + arguments = arguments.Concat(parameters.Select(p => PathNodeReference.Resolve(model, p))).ToArray(); + var argTypes = arguments.Select(a => a.GetType()).ToArray(); var ci = type.GetConstructor(argTypes); if (ci==null) return null; diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.ClassTable.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.ClassTable.cs index 5279b1d19..f31cdc578 100644 --- a/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.ClassTable.cs +++ b/Orm/Xtensive.Orm/Orm/Building/Builders/IndexBuilder.ClassTable.cs @@ -97,7 +97,7 @@ private void BuildClassTableIndexes(TypeInfo type) if (untypedIndexes.Contains(primaryIndex) && primaryIndex.ReflectedType == root) { primaryIndex = type.Indexes.Single(i => i.DeclaringIndex == primaryIndex.DeclaringIndex && i.IsTyped); } - var filterByTypes = type.AllDescendants.Append(type).ToList(type.AllDescendants.Count + 1); + var filterByTypes = type.AllDescendants.Append(type).ToList(); // Build virtual primary index if (ancestors.Count > 0) { @@ -156,4 +156,4 @@ private static bool IndexBuiltOverInheritedFields(IndexInfo index) return false; } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs index bdac61de9..fc6533ea9 100644 --- a/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Building/Builders/TypeBuilder.cs @@ -489,8 +489,7 @@ private KeyInfo BuildKeyInfo(TypeInfo root, HierarchyDef hierarchyDef) .Select(static field => field.Column) .ToArray(); - var keyTupleDescriptor = TupleDescriptor.Create( - keyColumns.Select(static c => c.ValueType).ToArray(keyColumns.Length)); + var keyTupleDescriptor = TupleDescriptor.Create(keyColumns.Select(static c => c.ValueType).ToArray()); var typeIdColumnIndex = -1; if (hierarchyDef.IncludeTypeId) { for (var i = 0; i < keyColumns.Length; i++) { diff --git a/Orm/Xtensive.Orm/Orm/EntitySetBase.cs b/Orm/Xtensive.Orm/Orm/EntitySetBase.cs index c412f36ea..39f8aff41 100644 --- a/Orm/Xtensive.Orm/Orm/EntitySetBase.cs +++ b/Orm/Xtensive.Orm/Orm/EntitySetBase.cs @@ -941,16 +941,15 @@ private static EntitySetTypeState BuildEntitySetTypeState(FieldInfo field, Entit .ToList() : CollectionUtils.ColNumRange(targetDescriptor.Count); - var keyFieldCount = ownerDescriptor.Count + itemColumnOffsets.Count; var keyFieldTypes = ownerDescriptor .Concat(itemColumnOffsets.Select(i => targetDescriptor[i])) - .ToArray(keyFieldCount); + .ToArray(); var keyDescriptor = TupleDescriptor.Create(keyFieldTypes); var map = Enumerable.Range(0, ownerDescriptor.Count) .Select(i => ((ColNum)0, (ColNum) i)) .Concat(itemColumnOffsets.Select(i => ((ColNum)1, i))) - .ToArray(keyFieldCount); + .ToArray(); var seekTransform = new MapTransform(true, keyDescriptor, map); Func itemCtor = null; diff --git a/Orm/Xtensive.Orm/Orm/Internals/KeyFactory.cs b/Orm/Xtensive.Orm/Orm/Internals/KeyFactory.cs index 09e88bf75..65f51aaa2 100644 --- a/Orm/Xtensive.Orm/Orm/Internals/KeyFactory.cs +++ b/Orm/Xtensive.Orm/Orm/Internals/KeyFactory.cs @@ -137,7 +137,7 @@ private static GenericKeyFactory BuildGenericKeyFactory(TypeInfo typeInfo) var descriptor = typeInfo.Key.TupleDescriptor; var keyTypeName = string.Format(GenericKeyNameFormat, WellKnownOrmTypes.KeyOfT.Namespace, WellKnownOrmTypes.Key.Name, descriptor.Count); var keyType = WellKnownOrmTypes.Key.Assembly.GetType(keyTypeName); - keyType = keyType.MakeGenericType(descriptor.ToArray(descriptor.Count)); + keyType = keyType.MakeGenericType(descriptor.ToArray()); var defaultConstructor = DelegateHelper.CreateDelegate>( null, keyType, "Create", Array.Empty()); var keyIndexBasedConstructor = DelegateHelper.CreateDelegate, Key>>( diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs index 88046ed36..5b0b0df54 100644 --- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs +++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs @@ -207,7 +207,7 @@ private static CompilableProvider CreateQueryForDirectAssociation(in ItemsQueryC AddResultColumnIndexes(resultColumns, primaryTargetIndex, 0); var association = cachingKey.ReferencingField.Associations.Last(); var field = association.Reversed.OwnerField; - var keyColumnTypes = field.Columns.SelectToArray(column => column.ValueType); + var keyColumnTypes = field.Columns.Select(column => column.ValueType).ToArray(); return primaryTargetIndex .GetQuery() .Filter(QueryHelper.BuildFilterLambda(field.MappingInfo.Offset, keyColumnTypes, ownerParameter)); diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/SetNode.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/SetNode.cs index 48ca74533..3e7e5f52e 100644 --- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/SetNode.cs +++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/SetNode.cs @@ -27,7 +27,7 @@ public IReadOnlyCollection ExtractKeys(object target) var entity = (Entity) target; var entitySet = (EntitySetBase) entity.GetFieldValue(Field); var fetchedKeys = entitySet.State.FetchedKeys; - return fetchedKeys.ToArray(fetchedKeys.Count); + return fetchedKeys.ToArray(); } public IHasNestedNodes ReplaceNestedNodes(IReadOnlyList nestedNodes) => @@ -45,4 +45,4 @@ public SetNode(string path, FieldInfo field, TypeInfo elementType, IReadOnlyList NestedNodes = nestedNodes; } } -} \ No newline at end of file +} diff --git a/Orm/Xtensive.Orm/Orm/Linq/Expressions/ConstructorExpression.cs b/Orm/Xtensive.Orm/Orm/Linq/Expressions/ConstructorExpression.cs index 5d53502ac..50f986efe 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Expressions/ConstructorExpression.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Expressions/ConstructorExpression.cs @@ -37,7 +37,7 @@ public override ParameterizedExpression BindParameter(ParameterExpression parame Bindings.ToDictionary(kvp => kvp.Key, kvp => genericBinder(kvp.Value)), NativeBindings.ToDictionary(kvp=>kvp.Key, kvp => genericBinder(kvp.Value)), Constructor, - ConstructorArguments.Select(genericBinder).ToArray(ConstructorArguments.Count)); + ConstructorArguments.Select(genericBinder).ToArray()); } public override Expression RemoveOuterParameter(Dictionary processedExpressions) diff --git a/Orm/Xtensive.Orm/Orm/Linq/Expressions/KeyExpression.cs b/Orm/Xtensive.Orm/Orm/Linq/Expressions/KeyExpression.cs index 701134218..d6219a224 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Expressions/KeyExpression.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Expressions/KeyExpression.cs @@ -107,7 +107,7 @@ public static KeyExpression Create(TypeInfo entityType, ColNum offset) FieldExpression CreateField(ColumnInfo c) => FieldExpression.CreateField(c.Field, offset); var fields = entityType.IsLocked - ? entityType.Key.Columns.Select(CreateField).ToArray(entityType.Key.Columns.Count) + ? entityType.Key.Columns.Select(CreateField).ToArray() : entityType.Columns .Where(c => c.IsPrimaryKey) .OrderBy(c => c.Field.MappingInfo.Offset) diff --git a/Orm/Xtensive.Orm/Orm/Linq/Expressions/Visitors/OwnerRemover.cs b/Orm/Xtensive.Orm/Orm/Linq/Expressions/Visitors/OwnerRemover.cs index d5945cc54..cd4dce206 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Expressions/Visitors/OwnerRemover.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Expressions/Visitors/OwnerRemover.cs @@ -47,7 +47,7 @@ internal override Expression VisitConstructorExpression(ConstructorExpression ex var oldConstructorArguments = expression.ConstructorArguments; var newConstructorArguments = VisitExpressionList(oldConstructorArguments); - var oldBindings = expression.Bindings.Values.ToArray(expression.Bindings.Count); + var oldBindings = expression.Bindings.Values.ToArray(); var newBindings = VisitExpressionList(oldBindings); var oldNativeBindings = expression.NativeBindings.Select(b => b.Value).ToArray().AsSafeWrapper(); diff --git a/Orm/Xtensive.Orm/Orm/Linq/ItemToTupleConverter{TItem}.cs b/Orm/Xtensive.Orm/Orm/Linq/ItemToTupleConverter{TItem}.cs index 245bf1c78..4ce3d0908 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/ItemToTupleConverter{TItem}.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/ItemToTupleConverter{TItem}.cs @@ -245,7 +245,7 @@ private Func BuildConverter(Expression sourceExpression) Expression = IsPersistableType(itemType) ? BuildField(itemType, ref index, types) : BuildLocalCollectionExpression(itemType, new HashSet(), ref index, null, types, sourceExpression); - TupleDescriptor = TupleDescriptor.Create(types.ToArray(types.Count)); + TupleDescriptor = TupleDescriptor.Create(types.ToArray()); return delegate(TItem item) { var tuple = Tuple.Create(TupleDescriptor); diff --git a/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs b/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs index 6e032b21a..8eb96fa41 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs @@ -1119,19 +1119,17 @@ private IList GetEntityFields(Expression expression, IReadOnlyList() - .ToArray(keyFields.Count); + return keyFields.Cast().ToArray(); } if (expression.IsNull()) { return keyFieldTypes .Select(type => (Expression) Expression.Constant(null, type.ToNullable())) - .ToArray(keyFieldTypes.Count); + .ToArray(); } if (IsConditionalOrWellknown(expression)) { return keyFieldTypes .Select((type, index) => GetConditionalKeyField(expression, type, index)) - .ToArray(keyFieldTypes.Count); + .ToArray(); } var nullEntityExpression = Expression.Constant(null, expression.Type); @@ -1179,14 +1177,14 @@ private IList GetKeyFields(Expression expression, IReadOnlyList() - .ToArray(keyExpression.KeyFields.Count); + .ToArray(); } if (expression.IsNull()) return keyFields .Select(f => f.Type) .Select(type => (Expression) Expression.Constant(null, type.ToNullable())) - .ToArray(keyFields.Count); + .ToArray(); var nullExpression = Expression.Constant(null, expression.Type); var isNullExpression = Expression.Equal(expression, nullExpression); @@ -1205,7 +1203,7 @@ private IList GetKeyFields(Expression expression, IReadOnlyList GetAnonymousArguments(Expression expression, Ty .Select((methodInfo, index) => (methodInfo.Name, Argument: newExpression.Arguments[index])) .OrderBy(a => a.Name) .Select(a => a.Argument); - return arguments.ToArray(newExpression.Members.Count); + return arguments.ToArray(); } if (expression.NodeType == ExpressionType.Constant) { @@ -1358,7 +1356,7 @@ private static IList GetAnonymousArguments(Expression expression, Ty return orderedProps1 .Select(p => (Expression) Expression.MakeMemberAccess(constantExpression, p)) - .ToArray(orderedProps1.Length); + .ToArray(); } } @@ -1369,7 +1367,7 @@ private static IList GetAnonymousArguments(Expression expression, Ty return orderedProps .Select(p => (Expression) Expression.MakeMemberAccess(expression, p)) - .ToArray(orderedProps.Length); + .ToArray(); static int CompareProps(PropertyInfo p1, PropertyInfo p2) { @@ -1795,7 +1793,7 @@ private static ProjectionExpression CreateLocalCollectionProjectionExpression new SystemColumn(translatorContext.GetNextColumnAlias(), 0, x)) - .ToArray(tupleDescriptor.Count); + .ToArray(); var rsHeader = new RecordSetHeader(tupleDescriptor, columns); var rawProvider = new RawProvider(rsHeader, itemToTupleConverter.GetEnumerable()); var recordset = new StoreProvider(rawProvider); diff --git a/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs b/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs index e96cf1e4a..6d6664b03 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs @@ -826,7 +826,7 @@ private Expression VisitAggregate(Expression source, MethodInfo method, LambdaEx var aggregateDescriptors = groupingDataSource.AggregateColumns .Select(c => c.Descriptor) .Append(aggregateDescriptor) - .ToArray(groupingDataSource.AggregateColumns.Length + 1); + .ToArray(); resultDataSource = new AggregateProvider( commonOriginDataSource, diff --git a/Orm/Xtensive.Orm/Orm/Model/IndexInfo.cs b/Orm/Xtensive.Orm/Orm/Model/IndexInfo.cs index 0220a9de0..a1d29c917 100644 --- a/Orm/Xtensive.Orm/Orm/Model/IndexInfo.cs +++ b/Orm/Xtensive.Orm/Orm/Model/IndexInfo.cs @@ -341,14 +341,14 @@ public override void Lock(bool recursive) private void CreateTupleDescriptors() { tupleDescriptor = TupleDescriptor.Create( - Columns.Select(static c => c.ValueType).ToArray(Columns.Count)); + Columns.Select(static c => c.ValueType).ToArray()); keyTupleDescriptor = TupleDescriptor.Create( - KeyColumns.Select(static c => c.Key.ValueType).ToArray(KeyColumns.Count)); + KeyColumns.Select(static c => c.Key.ValueType).ToArray()); } private void CreateColumns() { - Columns = KeyColumns.Select(static pair => pair.Key).Concat(ValueColumns).ToArray(KeyColumns.Count + ValueColumns.Count).AsSafeWrapper(); + Columns = KeyColumns.Select(static pair => pair.Key).Concat(ValueColumns).ToArray().AsSafeWrapper(); } /// Unsubscribe ColumnInfoCollections from FieldInfo events to avoid memory leak. diff --git a/Orm/Xtensive.Orm/Orm/Model/TypeInfo.cs b/Orm/Xtensive.Orm/Orm/Model/TypeInfo.cs index 3294e495a..92fd18454 100644 --- a/Orm/Xtensive.Orm/Orm/Model/TypeInfo.cs +++ b/Orm/Xtensive.Orm/Orm/Model/TypeInfo.cs @@ -808,11 +808,10 @@ private bool GetIsLeaf() => private void CreateTupleDescriptor() { - var orderedColumns = columns.OrderBy(c => c.Field.MappingInfo.Offset).ToList(columns.Count); + var orderedColumns = columns.OrderBy(c => c.Field.MappingInfo.Offset).ToList(); columns.Clear(); // To prevent event handler leak columns.AddRange(orderedColumns); - TupleDescriptor = TupleDescriptor.Create( - Columns.Select(c => c.ValueType).ToArray(Columns.Count)); + TupleDescriptor = TupleDescriptor.Create(Columns.Select(c => c.ValueType).ToArray()); } private void BuildTuplePrototype() @@ -876,8 +875,8 @@ private void BuildVersionExtractor() VersionExtractor = null; return; } - var types = versionColumns.Select(c => c.ValueType).ToArray(versionColumnsCount); - var map = versionColumns.Select(c => c.Field.MappingInfo.Offset).ToArray(versionColumnsCount); + var types = versionColumns.Select(c => c.ValueType).ToArray(); + var map = versionColumns.Select(c => c.Field.MappingInfo.Offset).ToArray(); var versionTupleDescriptor = TupleDescriptor.Create(types); VersionExtractor = new MapTransform(true, versionTupleDescriptor, map); } diff --git a/Orm/Xtensive.Orm/Orm/Providers/Expressions/ExpressionProcessor.cs b/Orm/Xtensive.Orm/Orm/Providers/Expressions/ExpressionProcessor.cs index 07d677cfa..8205ac52d 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/Expressions/ExpressionProcessor.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/Expressions/ExpressionProcessor.cs @@ -419,7 +419,7 @@ protected override SqlExpression VisitMethodCall(MethodCallExpression mc) if (mc.AsTupleAccess(activeParameters) != null) return VisitTupleAccess(mc); - var arguments = mc.Arguments.SelectToArray(a => Visit(a)); + var arguments = mc.Arguments.Select(a => Visit(a)).ToArray(); var mi = mc.Method; if (mc.Object!=null && mc.Object.Type!=mi.ReflectedType) { @@ -467,14 +467,14 @@ protected override SqlExpression VisitLambda(LambdaExpression l) protected override SqlExpression VisitNew(NewExpression n) { - return CompileMember(n.Constructor, null, n.Arguments.SelectToArray(a => Visit(a))); + return CompileMember(n.Constructor, null, n.Arguments.Select(a => Visit(a)).ToArray()); } protected override SqlExpression VisitNewArray(NewArrayExpression expression) { if (expression.NodeType!=ExpressionType.NewArrayInit) throw new NotSupportedException(); - var expressions = expression.Expressions.SelectToArray(e => Visit(e)); + var expressions = expression.Expressions.Select(e => Visit(e)).ToArray(); return SqlDml.Container(expressions); } diff --git a/Orm/Xtensive.Orm/Orm/Providers/PartialIndexFilterCompiler.cs b/Orm/Xtensive.Orm/Orm/Providers/PartialIndexFilterCompiler.cs index ea9eab66c..f1857a209 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/PartialIndexFilterCompiler.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/PartialIndexFilterCompiler.cs @@ -25,7 +25,7 @@ public string Compile(HandlerAccessor handlers, IndexInfo index) IReadOnlyList columns = filter.Fields .Select(field => field.Column.Name) .Select((name, i) => SqlDml.ColumnRef(table.Columns[i], name)) - .ToArray(fieldsCount); + .ToArray(); var processor = new ExpressionProcessor(filter.Expression, handlers, null, true, columns); var fragment = SqlDml.Fragment(processor.Translate()); diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Aggregate.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Aggregate.cs index dd8fad1af..420a45fc4 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Aggregate.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Aggregate.cs @@ -28,7 +28,7 @@ internal protected override SqlProvider VisitAggregate(AggregateProvider provide var columnNames = columns.Select((c, i) => i >= sqlSelect.Columns.Count ? sqlSelect.From.Columns[i].Name - : sqlSelect.Columns[i].Name).ToArray(columns.Count); + : sqlSelect.Columns[i].Name).ToArray(); sqlSelect.Columns.Clear(); var groupColumnIndexes = provider.GroupColumnIndexes; diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Helpers.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Helpers.cs index e27a7ec43..ceb0e4594 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Helpers.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Helpers.cs @@ -84,7 +84,7 @@ protected static SqlSelect ExtractSqlSelect(CompilableProvider origin, SqlProvid } protected IReadOnlyList ExtractColumnExpressions(SqlSelect query) => - query.Columns.Select(ExtractColumnExpression).ToArray(query.Columns.Count); + query.Columns.Select(ExtractColumnExpression).ToArray(); protected SqlExpression ExtractColumnExpression(SqlColumn column) { diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Include.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Include.cs index 2fe9fd30a..64bcd8304 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Include.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Include.cs @@ -46,7 +46,7 @@ internal protected override SqlProvider VisitInclude(IncludeProvider provider) Func parameterAccessor; var filterTupleDescriptor = provider.FilteredColumnsExtractionTransform.Descriptor; - var mappings = filterTupleDescriptor.Select(type => Driver.GetTypeMapping(type)).ToArray(filterTupleDescriptor.Count).AsSafeWrapper(); + var mappings = filterTupleDescriptor.Select(type => Driver.GetTypeMapping(type)).ToArray().AsSafeWrapper(); switch (algorithm) { case IncludeAlgorithm.Auto: if (tvpType != null) { @@ -119,7 +119,7 @@ protected SqlExpression CreateIncludeViaTemporaryTableExpression( var filterTupleDescriptor = provider.FilteredColumnsExtractionTransform.Descriptor; var filteredColumns = provider.FilteredColumns .Select(index => sourceColumns[index]) - .ToArray(provider.FilteredColumns.Count); + .ToArray(); tableDescriptor = DomainHandler.TemporaryTableManager .BuildDescriptor(Mapping, Guid.NewGuid().ToString(), filterTupleDescriptor); var filterQuery = tableDescriptor.QueryStatement.ShallowClone(); diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Index.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Index.cs index 573895d93..75e3b2278 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Index.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Index.cs @@ -223,11 +223,11 @@ private QueryAndBindings BuildFilteredQuery(IndexInfo index) } else { var values = filterByTypes - .Select(t => GetDiscriminatorValue(discriminatorMap, t.TypeDiscriminatorValue)).ToArray(filterByTypesCount); + .Select(t => GetDiscriminatorValue(discriminatorMap, t.TypeDiscriminatorValue)).ToArray(); filter = SqlDml.In(discriminatorColumn, SqlDml.Array(values)); if (containsDefault) { var allValues = discriminatorMap - .Select(p => GetDiscriminatorValue(discriminatorMap, p.Item1)).ToArray(discriminatorMap.Count); + .Select(p => GetDiscriminatorValue(discriminatorMap, p.Item1)).ToArray(); filter |= SqlDml.NotIn(discriminatorColumn, SqlDml.Array(allValues)); } } @@ -239,7 +239,7 @@ private QueryAndBindings BuildFilteredQuery(IndexInfo index) filter = filterByTypes.Count == 1 ? typeIdColumn == TypeIdRegistry[filterByTypes.First()] : SqlDml.In(typeIdColumn, - SqlDml.Array(filterByTypes.Select(t => TypeIdRegistry[t]).ToArray(filterByTypes.Count))); + SqlDml.Array(filterByTypes.Select(t => TypeIdRegistry[t]).ToArray())); } else { if (filterByTypes.Count == 1) { @@ -254,7 +254,7 @@ private QueryAndBindings BuildFilteredQuery(IndexInfo index) bindings.Add(binding); return binding.ParameterReference; }) - .ToArray(filterByTypes.Count); + .ToArray(); filter = SqlDml.In(typeIdColumn, SqlDml.Array(typeIdParameters)); } } diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.cs index 44ba63051..362cd7968 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.cs @@ -308,7 +308,7 @@ internal protected override SqlProvider VisitSeek(SeekProvider provider) pair => ((MappedColumn) headerColumns[pair.Key]).ColumnInfoRef.ColumnName!=typeIdColumnName; var keyColumns = provider.Header.Order .Where(filterNonTypeId) - .ToList(provider.Header.Order.Count); + .ToList(); parameterBindings.Capacity = keyColumns.Count; for (int i = 0, count = keyColumns.Count; i < count; i++) { diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlProvider.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlProvider.cs index 770b3552b..36d77677a 100644 --- a/Orm/Xtensive.Orm/Orm/Providers/SqlProvider.cs +++ b/Orm/Xtensive.Orm/Orm/Providers/SqlProvider.cs @@ -96,7 +96,7 @@ public SqlProvider(HandlerAccessor handlers, QueryRequest request, /// The provider. /// The permanent reference. public SqlProvider(SqlProvider provider, SqlTable permanentReference) - : base(provider.Origin, provider.Sources.Cast().ToArray(provider.Sources.Count)) + : base(provider.Origin, provider.Sources.Cast().ToArray()) { this.permanentReference = permanentReference; handlers = provider.handlers; diff --git a/Orm/Xtensive.Orm/Orm/Rse/ColumnCollection.cs b/Orm/Xtensive.Orm/Orm/Rse/ColumnCollection.cs index 168174451..4a4452fbc 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/ColumnCollection.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/ColumnCollection.cs @@ -65,7 +65,7 @@ public ColumnCollection Join(IEnumerable joined) public ColumnCollection Alias(string alias) { ArgumentException.ThrowIfNullOrEmpty(alias); - return new ColumnCollection(Columns.Select(column => column.Clone(alias + "." + column.Name)).ToArray(Count)); + return new ColumnCollection(Columns.Select(column => column.Clone(alias + "." + column.Name)).ToArray()); } // Constructors diff --git a/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/ContainsTableProvider.cs b/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/ContainsTableProvider.cs index 41398b8e6..5c70569c0 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/ContainsTableProvider.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/ContainsTableProvider.cs @@ -56,7 +56,7 @@ public ContainsTableProvider(FullTextIndexInfo index, Func index.Columns.First(c => c.Column == tc)) - .ToArray(targetColumns.Count) + .ToArray() .AsSafeWrapper(); TopN = topNByRank; if (FullFeatured) { @@ -72,12 +72,12 @@ public ContainsTableProvider(FullTextIndexInfo index, Func columnInfo.Key.ValueType) .Append(WellKnownTypes.Double) - .ToArray(primaryIndexKeyColumns.Count + 1); + .ToArray(); var tupleDescriptor = TupleDescriptor.Create(fieldTypes); var columns = primaryIndexKeyColumns .Select(static (c, i) => (Column) new MappedColumn("KEY", (ColNum) i, c.Key.ValueType)) .Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double)) - .ToArray(primaryIndexKeyColumns.Count + 1);; + .ToArray();; indexHeader = new RecordSetHeader(tupleDescriptor, columns); } Initialize(); diff --git a/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/FreeTextProvider.cs b/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/FreeTextProvider.cs index 49d0a91cf..99a76bcbd 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/FreeTextProvider.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/FreeTextProvider.cs @@ -65,12 +65,12 @@ public FreeTextProvider( var fieldTypes = primaryIndexKeyColumns .Select(static columnInfo => columnInfo.Key.ValueType) .Append(WellKnownTypes.Double) - .ToArray(primaryIndexKeyColumns.Count + 1); + .ToArray(); var tupleDescriptor = TupleDescriptor.Create(fieldTypes); var columns = primaryIndexKeyColumns .Select(static (c, i) => (Column) new MappedColumn("KEY", (ColNum) i, c.Key.ValueType)) .Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double)) - .ToArray(primaryIndexKeyColumns.Count + 1); + .ToArray(); indexHeader = new RecordSetHeader(tupleDescriptor, columns); } Initialize(); diff --git a/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs b/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs index 69851775a..1c00d7a43 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs @@ -186,14 +186,14 @@ public RecordSetHeader Select(IReadOnlyList columns) .Where(g => g.Keys.All(k => columnsMap[k] >= 0)) .Select(g => new ColumnGroup( g.TypeInfoRef, - g.Keys.Select(k => columnsMap[k]).ToArray(g.Keys.Count), + g.Keys.Select(k => columnsMap[k]).ToArray(), g.Columns .Select(c => columnsMap[c]) .Where(static c => c >= 0).ToList())); return new RecordSetHeader( - TupleDescriptor.CreateFromNormalized(columns.Select(i => TupleDescriptor[i]).ToArray(columns.Count)), - columns.Select((oldIndex, newIndex) => Columns[oldIndex].Clone((ColNum) newIndex)).ToArray(columns.Count), + TupleDescriptor.CreateFromNormalized(columns.Select(i => TupleDescriptor[i]).ToArray()), + columns.Select((oldIndex, newIndex) => Columns[oldIndex].Clone((ColNum) newIndex)).ToArray(), resultGroups.ToArray(), null, resultOrder); @@ -230,7 +230,7 @@ private static RecordSetHeader CreateHeader(IndexInfo indexInfo) var indexInfoColumns = indexInfo.Columns; var indexInfoKeyColumns = indexInfo.KeyColumns; - var resultFieldTypes = indexInfoColumns.Select(columnInfo => columnInfo.ValueType).ToArray(indexInfoColumns.Count); + var resultFieldTypes = indexInfoColumns.Select(columnInfo => columnInfo.ValueType).ToArray(); var resultTupleDescriptor = TupleDescriptor.Create(resultFieldTypes); var keyOrderEnumerable = indexInfoKeyColumns.Select(static (p, i) => new KeyValuePair((ColNum) i, p.Value)); @@ -245,13 +245,12 @@ private static RecordSetHeader CreateHeader(IndexInfo indexInfo) } var order = new DirectionCollection(keyOrderEnumerable); - var keyFieldTypes = indexInfoKeyColumns - .SelectToArray(static columnInfo => columnInfo.Key.ValueType); + var keyFieldTypes = indexInfoKeyColumns.Select(static columnInfo => columnInfo.Key.ValueType).ToArray(); var keyDescriptor = TupleDescriptor.Create(keyFieldTypes); var resultColumns = indexInfoColumns .Select(static (c,i) => (Column) new MappedColumn(new ColumnInfoRef(c), (ColNum) i, c.ValueType)) - .ToArray(indexInfoColumns.Count); + .ToArray(); var resultGroups = new[]{indexInfo.Group}; return new RecordSetHeader( diff --git a/Orm/Xtensive.Orm/Orm/Rse/Transformation/ColumnMappingInspector.cs b/Orm/Xtensive.Orm/Orm/Rse/Transformation/ColumnMappingInspector.cs index ef24b69eb..edb27ebf6 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/Transformation/ColumnMappingInspector.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/Transformation/ColumnMappingInspector.cs @@ -49,7 +49,7 @@ internal protected override IncludeProvider VisitInclude(IncludeProvider provide } var filteredColumns = provider.FilteredColumns .Select(el => (ColNum) mappings[provider].IndexOf(el)) - .ToArray(provider.FilteredColumns.Count); + .ToArray(); return new IncludeProvider(source, provider.Algorithm, provider.IsInlined, provider.FilterDataSource, provider.ResultColumnName, filteredColumns); } @@ -59,7 +59,7 @@ internal protected override SelectProvider VisitSelect(SelectProvider provider) var requiredColumns = mappings[provider]; var remappedColumns = requiredColumns .Select(c => provider.ColumnIndexes[c]) - .ToList(requiredColumns.Count); + .ToList(); mappings[provider.Source] = remappedColumns; var source = VisitCompilable(provider.Source); @@ -262,7 +262,7 @@ internal protected override AggregateProvider VisitAggregate(AggregateProvider p using ColumnMap sourceMap = new(mappings[provider.Source]); var currentMap = mappings[provider]; - mappings[provider] = provider.Header.Columns.Columns.Select(c => c.Index).ToList(provider.Header.Columns.Count); + mappings[provider] = provider.Header.Columns.Columns.Select(c => c.Index).ToList(); if (source == provider.Source) { return provider; @@ -279,7 +279,7 @@ internal protected override AggregateProvider VisitAggregate(AggregateProvider p var groupColumnIndexes = provider.GroupColumnIndexes .Select(index => (ColNum)sourceMap.IndexOf(index)) - .ToArray(provider.GroupColumnIndexes.Count); + .ToArray(); return new AggregateProvider(source, groupColumnIndexes, columns); } @@ -408,7 +408,7 @@ private static CompilableProvider BuildSetOperationSource(CompilableProvider pro var columns = expectedColumns .Select(originalIndex => (OriginalIndex: originalIndex, NewIndex: (ColNum) returningColumns.IndexOf(originalIndex))) - .Select(x => x.NewIndex < 0 ? x.OriginalIndex : x.NewIndex).ToArray(expectedColumns.Count); + .Select(x => x.NewIndex < 0 ? x.OriginalIndex : x.NewIndex).ToArray(); return new SelectProvider(provider, columns); } @@ -443,7 +443,7 @@ private static List Merge(IEnumerable left, IEnumerable right) foreach (var r in right) { _ = hs.Add(r); } - var resultList = hs.ToList(hs.Count); + var resultList = hs.ToList(); resultList.Sort(); return resultList; } @@ -522,9 +522,9 @@ private void VisitJoin( ref List rightMapping, ref CompilableProvider right, bool skipSort) { if (!skipSort) { - leftMapping = leftMapping.Distinct().ToList(leftMapping.Count); + leftMapping = leftMapping.Distinct().ToList(); leftMapping.Sort(); - rightMapping = rightMapping.Distinct().ToList(rightMapping.Count); + rightMapping = rightMapping.Distinct().ToList(); rightMapping.Sort(); } diff --git a/Orm/Xtensive.Orm/Orm/Rse/Transformation/Internals/ApplyProviderCorrectorRewriter.cs b/Orm/Xtensive.Orm/Orm/Rse/Transformation/Internals/ApplyProviderCorrectorRewriter.cs index 72810d583..266b92dbc 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/Transformation/Internals/ApplyProviderCorrectorRewriter.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/Transformation/Internals/ApplyProviderCorrectorRewriter.cs @@ -399,8 +399,8 @@ private static AggregateProvider RecreateAggregate(AggregateProvider provider, C private static CalculateProvider RecreateCalculate(CalculateProvider provider, CompilableProvider source) { var ccds = provider.CalculatedColumns - .SelectToArray( - column => new CalculatedColumnDescriptor(column.Name, column.Type, column.Expression)); + .Select(column => new CalculatedColumnDescriptor(column.Name, column.Type, column.Expression)) + .ToArray(); return source.Calculate(ccds); } diff --git a/Orm/Xtensive.Orm/Orm/Services/QueryBuilding/QueryBuilder.cs b/Orm/Xtensive.Orm/Orm/Services/QueryBuilding/QueryBuilder.cs index 8844f421a..0a8be2483 100644 --- a/Orm/Xtensive.Orm/Orm/Services/QueryBuilding/QueryBuilder.cs +++ b/Orm/Xtensive.Orm/Orm/Services/QueryBuilding/QueryBuilder.cs @@ -49,7 +49,7 @@ public QueryTranslationResult TranslateQuery(IQueryable query) if (request.ParameterBindings is ICollection bindingCollection) { return new QueryTranslationResult( request.Statement, - bindingCollection.SelectToArray(b => new QueryParameterBinding(b))); + bindingCollection.Select(b => new QueryParameterBinding(b)).ToArray()); } else return new QueryTranslationResult(request.Statement, diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs index c008af547..626c2a72a 100644 --- a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs +++ b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/HintGenerator.cs @@ -76,7 +76,7 @@ public HintGenerationResult Run() var upgradedTypesMapping = reverseTypeMapping .ToDictionary(item => item.Key.UnderlyingType, item => item.Value.UnderlyingType); - return new HintGenerationResult(hints.ToList(hints.Count), schemaHints, upgradedTypesMapping); + return new HintGenerationResult(hints.ToList(), schemaHints, upgradedTypesMapping); } #region Hint generation @@ -510,14 +510,15 @@ private void GenerateClearReferenceHint( string.Format(Strings.ExPairedIdentityColumnsForTypesXAndXNotFound, removedType, updatedType)); var sourceTablePath = GetTablePath(updatedType); - var identities = pairedIdentityColumns.SelectToList(pair => - CreateIdentityPair(removedType, updatedType, pair)); + var identities = pairedIdentityColumns + .Select(pair => CreateIdentityPair(removedType, updatedType, pair)) + .ToList(); if (removedType.Hierarchy.InheritanceSchema != InheritanceSchema.ConcreteTable) { identities.Add(CreateIdentityPair(removedType, removedType)); } var updatedColumns = pairedIdentityColumns - .SelectToList(pair => (GetColumnPath(updatedType, pair.Item2), (object) null)); + .Select(pair => (GetColumnPath(updatedType, pair.Item2), (object) null)).ToList(); if (association.ConnectorType == null) { schemaHints.Add(new UpdateDataHint(sourceTablePath, identities, updatedColumns)); @@ -826,15 +827,13 @@ private static IEnumerable GetAffectedMappedTypes(StoredTypeInfo private static StoredTypeInfo[] GetAffectedMappedTypesAsArray(StoredTypeInfo type, bool includeInheritors) { - var count = 1; IEnumerable result = [type]; if (includeInheritors) { result = result.Concat(type.AllDescendants); - count += type.AllDescendants.Length; } return type.Hierarchy.InheritanceSchema == InheritanceSchema.ConcreteTable ? result.Where(t => !t.IsAbstract).ToArray() - : result.ToArray(count); + : result.ToArray(); } private IdentityPair CreateIdentityPair(StoredTypeInfo removedType, StoredTypeInfo updatedType, int? typeIdOverride = null) @@ -961,8 +960,7 @@ private static (string, string)[] AssociateMappedFields(params ReadOnlySpan<(Sto tasks.Enqueue(newTask); } } - return result - .SelectToArray(mapping => (mapping.Item1.MappingName, mapping.Item2.MappingName)); + return result.Select(mapping => (mapping.Item1.MappingName, mapping.Item2.MappingName)).ToArray(); } #endregion diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/UpgradeHintsProcessor.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/UpgradeHintsProcessor.cs index 5de6bf510..3f95d5165 100644 --- a/Orm/Xtensive.Orm/Orm/Upgrade/Internals/UpgradeHintsProcessor.cs +++ b/Orm/Xtensive.Orm/Orm/Upgrade/Internals/UpgradeHintsProcessor.cs @@ -189,7 +189,7 @@ into g var newGenericDefType = hint.TargetType; if (genericTypeDefLookup.TryGetValue(newGenericDefType, out var instanceGroup)) { foreach (var triplet in instanceGroup.Instances) { - var newGenericArguments = triplet.Item3.SelectToArray(pair => pair.Item2); + var newGenericArguments = triplet.Item3.Select(pair => pair.Item2).ToArray(); rewrittenHints.Add(new RenameFieldHint(newGenericDefType.MakeGenericType(newGenericArguments), hint.OldFieldName, hint.NewFieldName)); } @@ -528,10 +528,8 @@ from association in model.Associations let type = association.ConnectorType where type != null select type - ).ToHashSet(); - return model.Types - .Where(type => !connectorTypes.Contains(type)) - .ToArray(model.Types.Length - connectorTypes.Count); + ); + return model.Types.Except(connectorTypes).ToArray(); } public static ClassifiedCollection GetGenericTypes(StoredDomainModel model) diff --git a/Orm/Xtensive.Orm/Sorting/TopologicalSorter.cs b/Orm/Xtensive.Orm/Sorting/TopologicalSorter.cs index 565a3fbd3..dc236c833 100644 --- a/Orm/Xtensive.Orm/Sorting/TopologicalSorter.cs +++ b/Orm/Xtensive.Orm/Sorting/TopologicalSorter.cs @@ -295,8 +295,8 @@ public static IReadOnlyList SortToList( { var (sorted, count) = SortInternal(nodes, out removedEdges, removeWholeNode); return (count == 0) - ? Array.Empty() - : sorted.ToArray(count); + ? [] + : sorted.ToArray(); } private static (IEnumerable sorted, int count) SortInternal( @@ -429,4 +429,4 @@ private static List> GetNodes(IEnumerable context.GetOrAdd(this, static (t, c) => - new(t.FunctionType, t.Arguments.Select(o => o.Clone(c)).ToArray(t.Arguments.Count))); + new(t.FunctionType, t.Arguments.Select(o => o.Clone(c)).ToArray())); public override void AcceptVisitor(ISqlVisitor visitor) => visitor.Visit(this); diff --git a/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlFunctionCall.cs b/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlFunctionCall.cs index 1c5bd2a2b..e9c2cb29b 100644 --- a/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlFunctionCall.cs +++ b/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlFunctionCall.cs @@ -27,7 +27,7 @@ public override void ReplaceWith(SqlExpression expression) internal override SqlFunctionCall Clone(SqlNodeCloneContext context) => context.GetOrAdd(this, static (t, c) => - new(t.FunctionType, t.Arguments.Select(o => o.Clone(c)).ToArray(t.Arguments.Count))); + new(t.FunctionType, t.Arguments.Select(o => o.Clone(c)).ToArray())); public override void AcceptVisitor(ISqlVisitor visitor) => visitor.Visit(this); diff --git a/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlUserFunctionCall.cs b/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlUserFunctionCall.cs index 0dcadaf3e..406913f2f 100644 --- a/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlUserFunctionCall.cs +++ b/Orm/Xtensive.Orm/Sql/Dml/Expressions/SqlUserFunctionCall.cs @@ -27,7 +27,7 @@ public override void ReplaceWith(SqlExpression expression) internal override SqlUserFunctionCall Clone(SqlNodeCloneContext context) => context.GetOrAdd(this, static (t, c) => - new(t.Name, t.Arguments.Select(o => o.Clone(c)).ToArray(t.Arguments.Count))); + new(t.Name, t.Arguments.Select(o => o.Clone(c)).ToArray())); internal SqlUserFunctionCall(string name, IReadOnlyList arguments) : base(SqlFunctionType.UserDefined, arguments) diff --git a/Orm/Xtensive.Orm/Sql/Dml/Hints/SqlForceJoinOrderHint.cs b/Orm/Xtensive.Orm/Sql/Dml/Hints/SqlForceJoinOrderHint.cs index 5a3d8e6bf..b09bee197 100644 --- a/Orm/Xtensive.Orm/Sql/Dml/Hints/SqlForceJoinOrderHint.cs +++ b/Orm/Xtensive.Orm/Sql/Dml/Hints/SqlForceJoinOrderHint.cs @@ -19,7 +19,7 @@ public class SqlForceJoinOrderHint : SqlHint internal override SqlForceJoinOrderHint Clone(SqlNodeCloneContext context) => context.GetOrAdd(this, static (t, c) => - new(t.Tables?.Select(table => (SqlTable) table.Clone()).ToArray(t.Tables.Count))); + new(t.Tables?.Select(table => (SqlTable) table.Clone()).ToArray())); public override void AcceptVisitor(ISqlVisitor visitor) { diff --git a/Orm/Xtensive.Orm/Sql/Dml/SqlContainsTable.cs b/Orm/Xtensive.Orm/Sql/Dml/SqlContainsTable.cs index 9f7ec7290..5d0ac9ba8 100644 --- a/Orm/Xtensive.Orm/Sql/Dml/SqlContainsTable.cs +++ b/Orm/Xtensive.Orm/Sql/Dml/SqlContainsTable.cs @@ -85,15 +85,13 @@ internal SqlContainsTable(DataTable dataTable, SqlExpression searchCondition, IC TargetTable = SqlDml.TableRef(dataTable); SearchCondition = searchCondition; TopNByRank = topNByRank; - var targetColumnCount = targetColumnNames.Count; - if (targetColumnCount == 0) { - TargetColumns = new SqlTableColumnCollection([Asterisk]); - } - else { - TargetColumns = new SqlTableColumnCollection(targetColumnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray(targetColumnCount)); - } - - columns = new SqlTableColumnCollection(columnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray(columnNames.Count)); + TargetColumns = new SqlTableColumnCollection( + targetColumnNames.Count == 0 + ? [Asterisk] + : targetColumnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray() + ); + + columns = new SqlTableColumnCollection(columnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray()); } } } diff --git a/Orm/Xtensive.Orm/Sql/Dml/SqlFreeTextTable.cs b/Orm/Xtensive.Orm/Sql/Dml/SqlFreeTextTable.cs index 62a486baa..aba1bef78 100644 --- a/Orm/Xtensive.Orm/Sql/Dml/SqlFreeTextTable.cs +++ b/Orm/Xtensive.Orm/Sql/Dml/SqlFreeTextTable.cs @@ -90,15 +90,14 @@ internal SqlFreeTextTable(DataTable dataTable, SqlExpression freeText, ICollecti TargetTable = SqlDml.TableRef(dataTable); FreeText = freeText; TopNByRank = topNByRank; - var targetColumnCount = targetColumnNames.Count; - if (targetColumnCount == 0) { + if (targetColumnNames.Count == 0) { TargetColumns = new SqlTableColumnCollection([Asterisk]); } else { - TargetColumns = new SqlTableColumnCollection(targetColumnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray(targetColumnCount)); + TargetColumns = new SqlTableColumnCollection(targetColumnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray()); } - columns = new SqlTableColumnCollection(columnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray(columnNames.Count)); + columns = new SqlTableColumnCollection(columnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray()); } } } diff --git a/Orm/Xtensive.Orm/Sql/Dml/SqlJoinedTable.cs b/Orm/Xtensive.Orm/Sql/Dml/SqlJoinedTable.cs index 1e73fd9be..0d70d3b8e 100644 --- a/Orm/Xtensive.Orm/Sql/Dml/SqlJoinedTable.cs +++ b/Orm/Xtensive.Orm/Sql/Dml/SqlJoinedTable.cs @@ -60,7 +60,7 @@ internal SqlJoinedTable(SqlJoinExpression joinExpression, IReadOnlyList (SqlTableColumn) column.Clone(context)).ToArray(columns.Count)); + clone.columns = new SqlTableColumnCollection(columns.Select(column => (SqlTableColumn) column.Clone(context)).ToArray()); return clone; } @@ -65,8 +65,8 @@ internal SqlTableRef(DataTable dataTable, string name, params string[] columnNam { DataTable = dataTable; var tableColumns = columnNames.Length == 0 - ? dataTable.Columns.Select(column => SqlDml.TableColumn(this, column.Name)).ToArray(dataTable.Columns.Count) - : columnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray(columnNames.Length); + ? dataTable.Columns.Select(column => SqlDml.TableColumn(this, column.Name)).ToArray() + : columnNames.Select(columnName => SqlDml.TableColumn(this, columnName)).ToArray(); columns = new SqlTableColumnCollection(tableColumns); } } diff --git a/Orm/Xtensive.Orm/Sql/SqlDriverConfiguration.cs b/Orm/Xtensive.Orm/Sql/SqlDriverConfiguration.cs index 7a7f0b5a9..97403cc76 100644 --- a/Orm/Xtensive.Orm/Sql/SqlDriverConfiguration.cs +++ b/Orm/Xtensive.Orm/Sql/SqlDriverConfiguration.cs @@ -45,7 +45,7 @@ public SqlDriverConfiguration Clone() // no deep cloning var accessors = (DbConnectionAccessors.Count == 0) ? Array.Empty() - : DbConnectionAccessors.ToArray(DbConnectionAccessors.Count); + : DbConnectionAccessors.ToArray(); return new SqlDriverConfiguration(accessors) { ForcedServerVersion = ForcedServerVersion, @@ -70,4 +70,4 @@ public SqlDriverConfiguration(IReadOnlyCollection connect DbConnectionAccessors = connectionAccessors; } } -} \ No newline at end of file +}