La requête ci-dessous est similaire à ce que j'essaie de réaliser, mais simplifiée. Dans mon code actuel, j'ai quatre tables jointes et j'essaie d'obtenir un résultat qui contient la dernière version. J'ai C# version que je suis très proche, mais ne pouvait pas créer une version Vb avec un résultat de type misLinq Group By - sélectionnez un seul enregistrement dans chaque groupe en résultat tapé
C# Version Cette requête génère SQL appropriée que je voulais, mais n'a pas pu sélectionner des colonnes dont je avais besoin.
var query= from user in Customers join adrs in CustomerAddress
on user.Id equals adrs.CustId
group user by adrs.CustId into g
select g.OrderByDescending(x=>x.adrs.Version).First();
VB Version Cette requête échoue dans l'ordre par et appelant la première génère sql moche dans le dos
dim query= from user in Customers Join adrs in CustomerAddress _
on user.Id Equals adrs.CustId _
Group By custId=adrs.CustId Into g = Group _
Order By adrs.version Descending _
Let latestAddress=g.First() _
Select new ResultObject() with _
{ _
.AddressId=latestAddress.adrs.Id, _
.Street=latestAddress.adrs.Street _
}
dim results=query.ToList()
- Mise à jour
Je cherche SQL similaire à ceci, qui est généré par la requête C# ci-dessus avec l'exception que je veux choisir les noms de colonne.
SELECT [t3].[test], [t3].[ID], [t3].[RequestQueueId], [t3].[CI_RequestType], [t3].[CI_Division], [t3].[CI_Company],
FROM (
SELECT [t0].[RequestQueueId]
FROM [RequestHeader] AS [t0]
GROUP BY [t0].[RequestQueueId]
) AS [t1]
OUTER APPLY (
SELECT TOP (1) 1 AS [test], [t2].[ID], [t2].[RequestQueueId], [t2].[CI_RequestType], [t2].[CI_Division], [t2].[CI_Company],
FROM [RequestHeader] AS [t2]
WHERE [t1].[RequestQueueId] = [t2].[RequestQueueId]
ORDER BY [t2].[Version] DESC
) AS [t3]
ORDER BY [t3].[Version] DESC
Pouvez-vous poster l'équivalent TSQL que vous voulez réaliser – Raymund
@Raymund, j'ai mis à jour la question avec sql souhaitée – Syam