var temp = (from assetVisit in db.AssetVisits
join assetBundle in db.AssetBundles on assetVisit.AssetID equals assetBundle.AssetID
join groupBundle in db.GroupBundles on assetBundle.BundleID equals groupBundle.BundleID
join userGroup in db.UserGroups on groupBundle.GroupID equals userGroup.GroupID
where assetVisit.CompanyID == companyID &&
userGroup.UserID == userID
select new { AssetID = assetVisit.AssetID, Count = assetVisit.AccessCounter }).Distinct();
IQueryable<Asset> final = (from t in temp
join asset in db.Assets on t.AssetID equals asset.AssetID
where asset.IsActive == true
&& asset.AssetTypeID == assetType
&& asset.ShowInResults == true
&& (asset.CompanyID == companyID || asset.CompanyID == -12081974)
orderby t.Count descending
select asset).Except(from companyAssets in db.Assets
join copiedAssets in db.Assets on companyAssets.AssetID equals copiedAssets.OriginalAssetID
where copiedAssets.CompanyID == companyID && companyAssets.CompanyID == -12081974 && copiedAssets.IsActive == true
select companyAssets);
return final.Take(limit);
好吧所以假设根据t.Count按顺序回馈资产,但我认为它可能不起作用,因为.Count实际上不属于正在被选中的资产的一部分,但我不知道如何解决这个问题。
正如你所看到的那样,有一个assetVisits表和一个资产表,我需要按照assetVisits.AccessCount的顺序取回资产,但我无法让它工作,到底是什么?
答案 0 :(得分:8)
几个小时前你问了一个almost identical question,答案是一样的:之后的订单你选择了你要订购的行。
变化:
return final.Take(limit);
为:
var finalOrdered = from asset in final
join assetVisit in db.AssetVisits on asset.AssetID equals assetVisit.AssetID
orderby assetVisit.AccessCounter
select asset;
return finalOrdered.Take(limit);
您也可以从自己的代码中删除过早的'orderby',因为它没有做任何事情。
答案 1 :(得分:2)
您的查询缺少ordeby子句。你在子查询中有一个,但是在最外面的查询表达式的任何地方放置orderby是相关的(除了使用top时)。
您必须在最外层的查询中指定orderby。