예제 #1
0
        internal void SetReferenceValue(QueryStructuralValue entityValue)
        {
            ExceptionUtilities.CheckArgumentNotNull(entityValue, "entityValue");
            this.EntityValue = entityValue;

            // compute key value
            QueryEntityType entityType = this.Type.QueryEntityType;
            var             keyType    = new QueryRecordType(this.EvaluationStrategy);

            keyType.AddProperties(entityType.Properties.Where(m => m.IsPrimaryKey));

            this.KeyValue = keyType.CreateNewInstance();

            for (int i = 0; i < keyType.Properties.Count; i++)
            {
                this.KeyValue.SetMemberValue(i, entityValue.GetValue(keyType.Properties[i].Name));
            }

            var set = entityType.EntitySet;

            this.EntitySetFullName = set.Container.Name + "." + set.Name;
        }
예제 #2
0
        private bool StructuralValuesAreEqual(QueryStructuralValue firstValueStructural, QueryStructuralValue secondValueStructural)
        {
            if (!this.StructuralTypesAreEqual(firstValueStructural.Type, secondValueStructural.Type))
            {
                return(false);
            }

            if (firstValueStructural.IsNull)
            {
                return(secondValueStructural.IsNull);
            }
            else if (secondValueStructural.IsNull)
            {
                return(false);
            }

            IEnumerable <QueryProperty> membersToCompare = firstValueStructural.Type.Properties;

            if (firstValueStructural.Type is QueryEntityType)
            {
                membersToCompare = membersToCompare.Where(m => m.IsPrimaryKey);
            }

            foreach (QueryProperty member in membersToCompare)
            {
                QueryValue innerFirstvalue  = firstValueStructural.GetValue(member.Name);
                QueryValue innerSecondvalue = secondValueStructural.GetValue(member.Name);

                if (!this.ValuesAreEqual(innerFirstvalue, innerSecondvalue))
                {
                    return(false);
                }
            }

            return(true);
        }