Linq: limite la lista a 1 fila por valores únicos según el valor (mínimo) de un solo campo

Tengo un procedimiento almacenado (no puedo editarlo) al que llamo a través de linq.

El procedimiento almacenado devuelve valores (datos más complejos pero importantes a continuación):

Customer   Stock Item   Date       Price   Priority  Qty
--------------------------------------------------------
CUST1      TAP         01-04-2012  £30     30        1 - 30
CUST1      TAP         05-04-2012  £33     30        1 - 30
CUST1      TAP         01-04-2012  £29     20        31 - 99
CUST1      TAP         01-04-2012  £28     10        1 - 30

Estoy tratando de limitar esta lista a filas que tienen Fechas únicas y cantidades únicas en LINQ. Quiero eliminar elementos con la prioridad MÁS ALTA dejando filas con fechas y cantidades únicas.

He probado varios group byestá usando Max y order by's pero no han sido capaces de obtener un resultado.

¿Hay alguna manera de hacer esto a través de linq?

EDIT:

Logró convertir la respuesta de brad-rem en VB.net.

Sintaxis a continuación si alguien lo necesita:

returnlist = (From p In returnlist
              Order By p.Qty Ascending, p.Priority
              Group By AllGrp = p.Date, p.Qty Into g = Group
              Select g.First).ToList

preguntado el 03 de mayo de 12 a las 17:05

no estoy seguro de cuál es tu objetivo; ¿Puedes mostrar lo que te gustaría obtener en base a los datos de muestra que has proporcionado? como conjunto de resultados -

1 Respuestas

¿Qué tal lo siguiente? Agrupa por Fecha y Cantidad y lo ordena para que las prioridades más bajas sean las primeras. Luego, simplemente selecciona el primer elemento de cada grupo, que son todos los elementos de menor prioridad:

var result = from d in dbData
orderby d.Priority 
group d by new
{
    d.Date,
    d.Qty
} into group1
select group1.First();

contestado el 03 de mayo de 12 a las 19:05

Parece muy prometedor, pero ¿conoces la sintaxis de vb.net para este tipo de grupo? He probado algunas variaciones diferentes sin suerte hasta ahora. - bendataclear

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.