Запрос LINQ to SQL не упорядочен, пожалуйста, помогите - PullRequest
0 голосов
/ 30 ноября 2009
    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, но я не могу заставить его работать, какого черта ??

Ответы [ 2 ]

8 голосов
/ 30 ноября 2009

Вы задали почти идентичный вопрос пару часов назад, и ответ тот же: выполните заказ после , выбрав строки, которые вы хотите заказать.

Изменение:

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' из своего собственного кода, поскольку он ничего не делает.

2 голосов
/ 30 ноября 2009

В вашем запросе отсутствует предложение ordeby. У вас есть один в подзапросе, но размещение порядка в любом месте, кроме самого внешнего выражения запроса, не имеет значения (за исключением случаев, когда также используется top).

Вы должны указать порядок в крайнем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...