/// <summary> /// Atualiza uma lista de valores passada pelo usuário, podendo ou não excluir os dados logicamente. /// </summary> /// <typeparam name="E">Tipo da entidade do banco de dados que vai ser atualizada</typeparam> /// <typeparam name="L">Tipo da entidade DTO a ser atualizada</typeparam> /// <param name="lista">Lista de entidade DTO</param> /// <param name="keyComparer">Chave para comparação da lista</param> /// <param name="valueComparer">Valor usado para comparação na lista</param> /// <param name="listAttributes">Lista de atributos a ser atualizado</param> /// <param name="listSetValues">Lista de valores usados para atualizar os campos da lista de atributos.</param> public static List <L> UpdateList <E, L>(this List <L> lista, FiltroServico servico, string keyType, Object valueComparer, bool deleteLogic = true, string[] listAttributes = null, Object[] listSetValues = null) where E : class where L : class { if (lista != null) { List <int> listId = lista.Where(x => (int)x.GetType().GetProperty("id").GetValue(x) > 0).Select(y => (int)y.GetType().GetProperty("id").GetValue(y)).ToList(); IEnumerable <E> listaDelete = servico.ObterTodos <E>().PropertyEquals(keyType, valueComparer).ToList().Where(x => !listId.Contains((int)x.GetType().GetProperty("id").GetValue(x))); lista.RemoveAll(x => (int)x.GetType().GetProperty("id").GetValue(x) > 0); if (deleteLogic) { listaDelete.ToList().DeleteLogicList <E, E>(servico, null, listAttributes, listSetValues); } else { servico.Excluir(listaDelete.AsQueryable(), true); } lista.ForEach(delegate(L obj) { obj.SetValues(listAttributes, listSetValues); }); servico.Salvar <E>(lista); } return(new List <L>()); }
/// <summary> /// Gera um guid único para a entidade passada comparando no banco se esse guid já existe.. caso exista o método é re-executado. /// </summary> /// <typeparam name="UC">tipo do objeto a ser usado na comparação</typeparam> /// <param name="obj">objeto usado para pegar o valor chave</param> /// <param name="keyValue">Campo chave para geração do guid</param> /// <param name="fieldComparer">Campo usado para comparar se a chave já foi cadastrada no banco</param> /// <param name="maxLength">Tamanho máximo para o retorno da guid valor máximo = 20, valor default = 20.</param> /// <param name="minLentgh">Tamanho mínimo para o retorno da guid valor máximo = 20, valor default = 0.</param> /// <returns></returns> public static string GenerateUniqueCode <UC>(this object obj, FiltroServico servico, string fieldComparer, int maxLength = 20) where UC : class { string code = Guid.NewGuid().ToString("N").Substring(0, maxLength).ToUpper(); if (servico.ObterTodos <UC>().PropertyEquals(fieldComparer, code).Count() < 1) { return(code); } else { return(obj.GenerateUniqueCode <UC>(servico, fieldComparer, maxLength)); } }