2009-11-30 3 views
1
(from assetVisit in AssetVisits 
         join assetBundle in AssetBundles on assetVisit.AssetID equals assetBundle.AssetID 
         join groupBundle in GroupBundles on assetBundle.BundleID equals groupBundle.BundleID 
         join userGroup in UserGroups on groupBundle.GroupID equals userGroup.GroupID 
         where assetVisit.CompanyID == 32 && 
           userGroup.UserID == 75 
         orderby assetVisit.AccessCounter descending 
         select assetVisit).Distinct() 

Notez la 'commande par' cependant quand les données reviennent il est ordonné par le PK de la table assetVisit, ce qui donne?Pourquoi cette requête LINQ TO SQL ne reviendra-t-elle pas dans le bon ordre?

SQL PAR LINQPad:

-- Region Parameters 
DECLARE @p0 Int SET @p0 = 32 
DECLARE @p1 Int SET @p1 = 75 
-- EndRegion 
SELECT DISTINCT [t0].[AssetVisitID], [t0].[CompanyID], [t0].[AssetID], [t0].[AccessCounter], [t0].[CreateBy], [t0].[CreateDate], [t0].[ModifyBy], [t0].[ModifyDate] 
FROM [AssetVisits] AS [t0] 
INNER JOIN [AssetBundles] AS [t1] ON [t0].[AssetID] = ([t1].[AssetID]) 
INNER JOIN [GroupBundles] AS [t2] ON ([t1].[BundleID]) = [t2].[BundleID] 
INNER JOIN [UserGroups] AS [t3] ON [t2].[GroupID] = [t3].[GroupID] 
WHERE ([t0].[CompanyID] = @p0) AND ([t3].[UserID] = @p1) 
+0

De quel type est AccessCounter? Quel SQL génère cette requête? – dahlbyk

+0

ahh bon appel, il ne semble pas y avoir aucun ordre dans la version SQL ... – BigOmega

Répondre

3

Votre "commande par" devrait être après la distincte.

(from assetVisit in AssetVisits 
    join assetBundle in AssetBundles on assetVisit.AssetID equals assetBundle.AssetID 
    join groupBundle in GroupBundles on assetBundle.BundleID equals groupBundle.BundleID 
    join userGroup in UserGroups on groupBundle.GroupID equals userGroup.GroupID 
    where assetVisit.CompanyID == 32 && 
       userGroup.UserID == 75 
    select assetVisit).Distinct().OrderByDescending(assetVisit => assetVisit.AccessCounter); 

Ou si vous souhaitez continuer à utiliser la syntaxe de requête, vous pouvez l'écrire comme ceci:

var innerQuery = 
     (from assetVisit in AssetVisits 
     join assetBundle in AssetBundles on assetVisit.AssetID equals assetBundle.AssetID 
     join groupBundle in GroupBundles on assetBundle.BundleID equals groupBundle.BundleID 
     join userGroup in UserGroups on groupBundle.GroupID equals userGroup.GroupID 
     where assetVisit.CompanyID == 32 && 
        userGroup.UserID == 75 
     select assetVisit).Distinct(); 

    var query = from assetVisit in innerQuery 
      orderby assetVisit.AccessCounter descending 
      select assetVisit; 
+0

ahh .. mais ceci: Distinct(). OrderBy (assetVisit.AccessCounter descendant) jette une erreur, comment est-ce censé vraiment regarder ? – BigOmega

+0

Mise à jour du commentaire pour inclure le code. –

+0

qu'est-ce que 'asset' d'où vient-il? – BigOmega

Questions connexes