C# 为什么赢了';这个LINQ到SQL查询不是按正确的顺序返回的吗?
注意“order by”,但是当数据返回时,它是按assetVisit表的主键排序的,给出了什么 每LINQPAD的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
(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;