C# 为什么赢了';这个LINQ到SQL查询不是按正确的顺序返回的吗?

C# 为什么赢了';这个LINQ到SQL查询不是按正确的顺序返回的吗?,c#,linq-to-sql,C#,Linq To Sql,注意“order by”,但是当数据返回时,它是按assetVisit表的主键排序的,给出了什么 每LINQPAD的SQL: (from assetVisit in AssetVisits join assetBundle in AssetBundles on assetVisit.AssetID equals assetBundle.AssetID join groupBundle in Group

注意“order by”,但是当数据返回时,它是按assetVisit表的主键排序的,给出了什么

每LINQPAD的SQL:

(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()
您的“订购人”应位于“明确”之后

-- 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)
或者,如果您希望继续使用查询语法,可以这样编写:

    (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);

我以前碰到过这个。distinct运算符“撤消”先前在LINQ语句中指定的任何顺序

这里有一个很好的解释:

什么类型的AccessCounter?此查询生成什么SQL?啊,很好的调用。SQL版本中似乎没有任何排序…啊。。但是这个:Distinct().OrderBy(assetVisit.AccessCounter descending)抛出了一个错误,它应该是什么样子的?什么是“资产”它来自哪里?它是OrderBy函数的参数。它可能应该被称为assetVisit,我会修改它。Ryan:我已经用另一个版本更新了我的答案,这个版本只使用您已经熟悉的语法。我希望你能理解我帖子的第二个版本。
    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;