I have the following SQL Query:
SELECT D.[UNIC]
,D.[UNIC_ETICHETA]
,D.[CATEGORIE]
,D.[NUME]
,A.[VALOARE]
,A.[UM]
FROM FINAL D
CROSS APPLY
(
SELECT TOP 1 [ VALOARE],[ UM]
FROM FINAL E
WHERE E.UNIC = D.UNIC AND E.[UNIC_ETICHETA] = D.[UNIC_ETICHETA] AND E.[CATEGORIE] = D.[CATEGORIE]
) A
GROUP BY D.UNIC, D.[UNIC_ETICHETA], D.[CATEGORIE], D.[NUME], A.[VALOARE], A.[UM]
How would I transform it to a lambda or linq query?
The class model bellow.
[Table("FINAL", Schema = "dbo")]
public partial class Final
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UNIC
{
get;
set;
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UNIC_ETICHETA
{
get;
set;
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string? CATEGORIE
{
get;
set;
}
public string? NUME
{
get;
set;
}
public decimal? VALOARE
{
get;
set;
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string? UM
{
get;
set;
}
}
I've got to something like this so far, but I dont know how to get the first VALOARE and UM from that CROSS APPLY.
Final finalGroupped = (Final)final.GroupBy(g => new { g.UNIC, g.UNIC_ETICHETA, g.CATEGORIE, g.NUME, g.VALOARE, g.UM })
.Select(b => new Final
{
UNIC = b.Key.UNIC,
UNIC_ETICHETA = b.Key.UNIC_ETICHETA,
CATEGORIE = b.Key.CATEGORIE,
NUME = b.Key.NUME,
VALOARE = b.Key.VALOARE,
UM = b.Key.UM
});
Desired output will be like the one in the image bellow: