Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2021
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 305
Poder: 23
elrayo76 Va camino a la fama
Lo que he podido realizar hasta ahora es lo siguiente

Código:
                var Records = ExcelTable.AsEnumerable()
                    .GroupBy(g => new
                    {
                        Branch = g["Ramo"],
                        Product = g["Producto"],
                        Policy = g["Poliza"],
                        Descrip = g["Descripcion"],
                    })
                    .Select(r =>
                    {
                        var row = ExcelTable.NewRow();
                        row["Ramo"] = r.Key.Branch;
                        row["Producto"] = r.Key.Product;
                        row["Poliza"] = r.Key.Policy;
                        row["Descripcion"] = r.Key.Descrip;
                        return row;
                    });
Esto me está devolviendo todos los grupos, incluidos los que no necesito. No se como realizar la parte que me falta para que solo queden como en el ejemplo de Casimiro

Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #2  
Antiguo 02-12-2021
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El problema fundamental es que los datos no tienen claro cual es su unicidad. Hice un ejemplo en:

https://dotnetfiddle.net/PSiEN5

Código PHP:
using System;
using System.Linq;
using System.Collections.Generic;

class 
Tabla
{
    public 
int ramo;
    public 
int producto;
    public 
int poliza;
    public 
string descripcion;
}

public class 
Program
{
    public static 
void Main()
    {
        List<
Tablarecords = new List<Tabla>()
        {new 
Tabla{ramo 1730producto 1poliza 200descripcion "Pruebas 2"}, new Tabla{ramo 1730producto 1poliza 200descripcion "Pruebas"}, new Tabla{ramo 1730producto 1poliza 200descripcion "Pruebas 2"}, new Tabla{ramo 1730producto 1poliza 120descripcion "Pruebas"}, };
        List<
Tabla= (
            
from row in records
            orderby row
.ramorow.productorow.poliza descendingrow.descripcion descending
            group row by 
new
            {
            
row.ramorow.productorow.poliza
            
}
                
into t
                select 
new Tabla()
                {
ramo t.Key.ramoproducto t.Key.producto
                 
poliza t.Key.polizadescripcion t.ToList().FirstOrDefault().descripcion}).ToList();
        
        foreach (
Tabla item in q)
        {
            
Console.Write(item.ramo);
            
Console.Write(item.producto);
            
Console.Write(item.poliza);
            
Console.WriteLine(item.descripcion);
        }
    }

Código:
17301200Pruebas 2
17301120Pruebas
Como vez, no da exacto con Casimiro porque el resultado que pone tiene ambigüedad con los datos que tienes.

Tu ejemplo anterior dice que todos los campos hay que agruparlos, pero eso no coincide con los resultados posibles. Dependiendo de qué campos y de que orden se cambia el resultado, PERO, es AMBIGUO! Con mas datos dudo de que sea estable la solución!

La solución es encontrar cómo diferenciar los datos y asignarles un ORDEN/RANK.

Describes que estos datos NO SON los reales y que usaste un ejemplo? Si es asi, solo estas complicando la solucion. Por ejemplo, es muy dificil usando STRING determinar el orden/ranking porque su orden esta basado en reglas de idiomas humanos.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 02-12-2021
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 305
Poder: 23
elrayo76 Va camino a la fama
mamcx gracias por la respuesta.

Entiendo todo lo que dices. El tema es que en el Excel que importa el usuario hay datos como Ramo/Producto/Poliza que son los que se toman como clave para agrupar. Estos grupos pueden tener columnas donde sus datos deben ser todos iguales, en otras columnas si son distintos no hay problema.

En el caso de encontrar un dato distinto en alguna columna donde deben ser todos iguales se le debe avisar al usuario y se anula todo el proceso de importación.

Igualmente gracias nuevamente por lo comentado. Voy a ver como lo soluciono. Cualquier cosa veré si es mas fácil hacerlo del lado de la base de datos y lo propondré al analista a ver que dice.

Saludos
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #4  
Antiguo 03-12-2021
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Ah ok, entonces el asunto es MAS simple. Si es un error, solo necesitas es filtrar los que tienen mas de 1 registro:

Código PHP:
using System;
using System.Linq;
using System.Collections.Generic;

class 
Tabla
{
    public 
int ramo;
    public 
int producto;
    public 
int poliza;
    public 
string descripcion;
}

class 
Result
{
    public 
int ramo;
    public 
int producto;
    public 
int poliza;
    public 
int total;
}

public class 
Program
{
    public static 
void Main()
    {
        List<
Tablarecords = new List<Tabla>()
        {new 
Tabla{ramo 1730producto 1poliza 200descripcion "Pruebas 2"}, new Tabla{ramo 1730producto 1poliza 200descripcion "Pruebas"}, new Tabla{ramo 1730producto 1poliza 200descripcion "Pruebas 2"}, new Tabla{ramo 1730producto 1poliza 120descripcion "Pruebas"}, };
        List<
Result= (
            
from row in records
            orderby row
.ramorow.productorow.poliza descendingrow.descripcion descending
            group row by 
new
            {
            
row.ramorow.productorow.poliza
            
}

                
into t
                select 
new Result()
                {
ramo t.Key.ramoproducto t.Key.productopoliza t.Key.polizatotal t.Count()});
        
        foreach (
Result item in q)
        {
            if (
item.total 1)
            {
                
Console.Write(item.ramo);
                
Console.Write(item.producto);
                
Console.Write(item.poliza);
            }
        }
    }

__________________
El malabarista.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
concatenar dos valores de registros distintos según duplicados lmpadron SQL 3 30-08-2012 17:05:05
conteo de registros distintos El Mike SQL 3 05-02-2009 21:42:16
Saber número de registros distintos en una columna de una consulta. Angel Fernández Firebird e Interbase 17 06-11-2008 12:10:05
Actualizar DataTable Juampy .NET 2 24-04-2007 19:17:19
Concatenacion de caracteres de distintos registros casandra Firebird e Interbase 10 17-08-2005 20:19:03


La franja horaria es GMT +2. Ahora son las 21:35:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi