2016-06-21 11 views
0

ユーザーがカテゴリごとにレコードをフィルタできるアプリケーションで作業しています。LINQクエリを改善する方法

レコードには1が必要ですが、多くのカテゴリを持つことができます。 (1- *)

私はこの検索を改善するために何ができますか?

トランザクションに多数のレコード(1-many)がある可能性があります レコードに多数のカテゴリ(1-many)がある可能性があります 選択したカテゴリを繰り返します私は、クエリを実行し、メソッドの構文を中にとどまることを好むない、メソッドの構文を使用しています

retrieve all announcements 

if(startDate and endDate have values) 
    model = model.Where(x => x.WADate >= start.Value && x.WADate <= end.Value).ToList(); 

if(queryString is not null) 
    model = model.Where(
         x => x.WANum.Contains(query) || 
         x.Tooltip.ToLower(CultureInfo.InvariantCulture).Contains(query) 
         || x.Topic.ToLower(CultureInfo.InvariantCulture).Contains(query) 
        ).ToList(); 

if (selectedCategories.Count > 0) 
     { 
      bool HasMatch; 
      foreach (var ancmt in announcements) 
      { 
       HasMatch = false; 
       foreach (var cat in selectedCategories) 
       { 
        foreach (var xref in ancmt.waXref) 
        { 
         if (cat.ID == xref.WACategoryID) 
         { 
          HasMatch = true; 
         } 
        } 
       } 
       if(HasMatch) 
       { 
        model.Add(new EditViewModel 
        { 
         WATypeID = ancmt.WATypeID, 
         WANum = ancmt.WANum, 
         WATypeName = ancmt.waType.WATypeDescription, 
         Link = ancmt.Link, 
         Tooltip = ancmt.Tooltip, 
         Topic = ancmt.Topic, 
         WADate = ancmt.WADate, 
         WAID = ancmt.WAID, 
        }); 

        ancmt.waXref.ToList().ForEach(
         x => model.Last().Categories.Add(
          new CategoryViewModel { ID = x.WACategoryID, Name = x.waCategory.WACategory, IsSelected = false })); 
       } 
      } 
     } 
     // If no catgories were selected, keep all announcements for next stage of search 
     else 
     { 
      foreach (var ancmt in announcements) 
      { 
       model.Add(new EditViewModel 
       { 
        WATypeID = ancmt.WATypeID, 
        WANum = ancmt.WANum, 
        WATypeName = ancmt.waType.WATypeDescription, 
        Link = ancmt.Link, 
        Tooltip = ancmt.Tooltip, 
        Topic = ancmt.Topic, 
        WADate = ancmt.WADate, 
        WAID = ancmt.WAID, 
       }); 

       ancmt.waXref.ToList().ForEach(
        x => model.Last().Categories.Add(
         new CategoryViewModel { ID = x.WACategoryID, Name = x.waCategory.WACategory, IsSelected = false })); 
      } 
     } 

私がやっているものの基本的なアウトラインを検索するために、以下のです。

+6

これはLinqのクエリのようには見えません。 –

+0

"照会"の期待される結果がどのようなものであるべきかをコードから判断するのは難しいです。各レコードに一致フラグを設定しているようです。その代わりに、実際のLinqクエリを実行してみませんか? –

+0

実コードに@RobertHarvey – Ingenioushax

答えて

1

実際のパフォーマンス向上のためには、クライアントPCではなく、データベースで真の重量挙げ処理を処理するために、特定のストアドプロシージャを作成することをお勧めします。

+0

このルートを実行し、いくつかのストアドプロシージャを作成して、データをスリムな結果セットに戻しました。 – Ingenioushax

関連する問題