System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.VerifyTypeSupportedForComparison C# (CSharp) Метод

VerifyTypeSupportedForComparison() приватный статический Метод

Utility method validating type for comparison ops (isNull, equals, etc.). Only primitive types, entity types, and simple row types (no IGrouping/EntityCollection) are supported.
private static VerifyTypeSupportedForComparison ( Type clrType, TypeUsage edmType, Stack memberPath, bool isNullComparison ) : void
clrType Type
edmType TypeUsage
memberPath Stack
isNullComparison bool
Результат void
        private static void VerifyTypeSupportedForComparison(Type clrType, TypeUsage edmType, Stack<EdmMember> memberPath, bool isNullComparison)
        {
            // NOTE: due to bug in null handling for complex types, complex types are currently not supported
            // for comparisons (see SQL BU 543956)
            switch (edmType.EdmType.BuiltInTypeKind)
            {
                case BuiltInTypeKind.PrimitiveType:
                case BuiltInTypeKind.EnumType:
                case BuiltInTypeKind.EntityType:
                case BuiltInTypeKind.RefType:
                    return;

                case BuiltInTypeKind.RowType:
                    {
                        InitializerMetadata initializerMetadata;
                        if (!InitializerMetadata.TryGetInitializerMetadata(edmType, out initializerMetadata)
                            ||
                            initializerMetadata.Kind == InitializerMetadataKind.ProjectionInitializer
                            ||
                            initializerMetadata.Kind == InitializerMetadataKind.ProjectionNew)
                        {
                            if (!isNullComparison)
                            {
                                VerifyRowTypeSupportedForComparison(clrType, (RowType)edmType.EdmType, memberPath, isNullComparison);
                            }
                            return;
                        }
                        break;
                    }
                default:
                    break;
            }

            if (null == memberPath)
            {
                throw new NotSupportedException(Strings.ELinq_UnsupportedComparison(DescribeClrType(clrType)));
            }
            else
            {
                // build up description of member path
                var memberPathDescription = new StringBuilder();
                foreach (var member in memberPath)
                {
                    memberPathDescription.Append(Strings.ELinq_UnsupportedRowMemberComparison(member.Name));
                }
                memberPathDescription.Append(Strings.ELinq_UnsupportedRowTypeComparison(DescribeClrType(clrType)));
                throw new NotSupportedException(Strings.ELinq_UnsupportedRowComparison(memberPathDescription.ToString()));
            }
        }