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<Tabla> records = new List<Tabla>()
{new Tabla{ramo = 1730, producto = 1, poliza = 200, descripcion = "Pruebas 2"}, new Tabla{ramo = 1730, producto = 1, poliza = 200, descripcion = "Pruebas"}, new Tabla{ramo = 1730, producto = 1, poliza = 200, descripcion = "Pruebas 2"}, new Tabla{ramo = 1730, producto = 1, poliza = 120, descripcion = "Pruebas"}, };
List<Tabla> q = (
from row in records
orderby row.ramo, row.producto, row.poliza descending, row.descripcion descending
group row by new
{
row.ramo, row.producto, row.poliza
}
into t
select new Tabla()
{ramo = t.Key.ramo, producto = t.Key.producto,
poliza = t.Key.poliza, descripcion = 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.