0

私は次のようなクエリを実行しています:

ジョインあり

public IEnumerable<ProblemsViewModel_Base> GetProblemsSearchClassification(string searchTerm)
    {
        var subjectProblems =
            from p in aux_problem
            join sub in Subject on p.aux_ClassificationID.Id equals sub.Id
            where sub.Title.Contains(searchTerm)
            orderby p.CreatedOn descending
            select new ProblemsViewModel_Base
            {
                aux_CustomID = p.aux_CustomID
                ,
                Id = p.aux_problemId.Value
                ,
                title = p.aux_name
                ,
                CreatedOn = p.CreatedOn.Value
            };

        return subjectProblems;
    }

そして結合なし

public IEnumerable<ProblemsViewModel_Base> GetProblemsSearchDetails(string searchTerm){
    var detailsProblems = aux_problem
            .Where(p => p.aux_CustomID.Contains(searchTerm))
            .OrderByDescending(c => c.CreatedOn)
         .Select(i => new ProblemsViewModel_Base
            {
                aux_CustomID = i.aux_CustomID
                ,
                Id = i.aux_problemId.Value
                ,
                title = i.aux_name
                ,
                CreatedOn = i.CreatedOn.Value
            });

        return detailsProblems;}

3 つのクエリを実行した後、次のように参加して明確な結果を得ています。

var joinedResults = detailsResults.Union(requestorResults).Union(classificationResults);
var distinctResults = joinedResults.GroupBy(p => p.Id).Select(p => p.First())

私の問題は、結果で 2 番目のクエリ (結合を持たないクエリ) でユニオンを実行したときに発生します。結果が順序付けられます。

ここで問題になる可能性があるのはどれですか? ありがとう!

4

2 に答える 2

0

次のように比較を変更するソリューションを見つけました:

var distinctResults = joinedResults.GroupBy(p => p.Id).Select(p => p.First()).OrderByDescending(p => p.CreatedOn);

すべてのクエリで OrderBy をコメントアウトしました。後で実行しているためです。それがないと、クエリが高速になると思います。

于 2013-01-16T14:11:15.447 に答える
0

私の経験では .Union()
.Distinct() そして、他の人は順序付けを元に戻します結果を提示する前に順序付けを試みますが、すべてのコードの後に

フィードバックをお願いします

于 2013-01-16T13:25:40.680 に答える