示例#1
0
        //// Experiment 1
        //public static T Extend1<T>(T target, params object[] sources)
        //{
        //    foreach (var source in sources)
        //    {
        //        JObject.FromObject(source).ToObject<T>();
        //    }
        //    return target;
        //}

        //// Experiment 2
        //public static Dto Extend2(Dto target, params Dto[] sources)
        //{
        //    foreach (var source in sources)
        //    {
        //        foreach (var prop in source)
        //        {
        //            target[prop.Key] = prop.Value;
        //        }
        //    }
        //    return target;
        //}

        public static Dto Extend(Dto target, Dto source, bool onlyExistingProperties = false)
        {
            foreach (var prop in source)
            {
                if (!(onlyExistingProperties && target.ContainsKey(prop.Key)))
                {
                    target[prop.Key] = prop.Value;
                }
            }
            return(target);
        }
        public static bool ValidDtoKey(string entityTypeName, Dto dto, MetadataSrv.Metadata metadataSrv)
        {
            var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

            foreach (var name in keyNames)
            {
                if (!(dto.ContainsKey(name) || Regex.IsMatch(dto[name].ToString(), @"^\d+$")))
                {
                    return(false);
                }
            }
            return(true);
        }
            public static bool KeyPresent(string entityTypeName, Dto dto, MetadataSrv.Metadata metadataSrv)
            {
                var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

                foreach (var keyName in keyNames)
                {
                    if (!dto.ContainsKey(keyName))
                    {
                        return(false);
                    }
                }
                return(true);
            }
        public static bool ValidDto(string entityTypeName, Dto key, Dto dto, MetadataSrv.Metadata metadataSrv)
        {
            var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

            // if dto has key fields, their values should match the key values from query string
            foreach (var name in keyNames)
            {
                if (dto.ContainsKey(name) && dto[name] != key[name])
                {
                    return(false);
                }
            }
            return(true);
        }
            internal static string GetFilterFromKey(string[] keyNames, Dto dto)
            {
                var result = new List <string>();

                if (keyNames.Length == 0)
                {
                    throw new Exception("Invalid key");
                }
                foreach (var keyName in keyNames)
                {
                    if (!dto.ContainsKey(keyName))
                    {
                        throw new Exception("Key fiels not present");
                    }
                    result.Add(keyName + "=" + dto[keyName]);
                }
                return(string.Join(" AND ", result));
            }