示例#1
0
 /// <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>());
 }
示例#2
0
        /// <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));
            }
        }