2

私はLinqを初めて使用します。問題を解決してください。ページの読み込みに時間がかかるため、DB 呼び出しを回避しようとしています。

私のコード:

小売業者のリストを取得できるように、毎週小売業者を計算しています

var weeklyRetailers =
                result.Where(i => i.ManufacturerId == manufacturerRow.Id && i.CountryId == countryRow.Id
                                  && i.CategoryId == categoryRow.Id && i.Date >= localStart && i.Date <= localEnd);

今、DB から小売業者のオブジェクトにアクセスするための小売業者の行を取得しています

 var retailer = _retailerRepository.GetRetailer(weeklyRetailer.RetailerId);

ノート

週の選択が多すぎると時間がかかりすぎる小売業者の呼び出しごとに DB に行く代わりに、Db の呼び出しを避けたいと思います。

だから私は試しました:

var retailersListToIterate = _retailerRepository.GetAllRetailersList();

マイリポジトリ機能

    /// <summary>
    /// Return a list of retailer row 
    /// </summary>
    /// <returns></returns>
    public List<Retailer> GetAllRetailersList()
    {
        List<Retailer> a = (from aa in _er.Retailers
                           orderby aa.Description ascending
                           select aa).ToList();
        return a;
    } 

Linq の使用

var retailer = retailersListToIterate.Where(i => i.Id == weeklyRetailer.RetailerId);

しかし、これは Retailer オブジェクトにアクセスするために Retailer 行全体を返すわけではありません。

アドバイスをいただければ幸いです。

ありがとう..

4

2 に答える 2

2

IEnumerable オブジェクトでフィルタリングを行っていると思います。DB 操作を行っており、データ セットに対してフィルタリングを行っている場合は、IEnumerable(List) オブジェクトではなく、常に IQueryable オブジェクトに対してフィルタリングを行ってください。多くの無駄な時間を節約できます。違いについては、リンクを参照してください。 IQueryable と IEnumerable の違い

于 2013-11-11T13:51:43.050 に答える
2

の結果

var retailer = retailersListToIterate.Where(i => i.Id == weeklyRetailer.RetailerId);

Retailerオブジェクトではありません。これはIEnumerable<Retailer>です。したがって、長さなどを確認ElementAt(0)し、結果に使用する必要があります。

または書く

var retailer = retailersListToIterate.SingleOrDefault(i => i.Id == weeklyRetailer.RetailerId);

正確に1つを提供するRetailernull、小売業者IDが不明な場合。

また、私が正しければ、いくつかの複数選択があり、選択された小売業者のリストをDBに一度に取得したいと考えています。その場合、小売業者の ID を含むリストを作成し、条件句を使用して DB にクエリを実行できますwhere myListOfIds.Contains(i.Id)。これは、4000 を超える小売業者をクエリしない限り安全です。これはSELECT FROM IN(ID1, ID2 ...)、SQL のステートメントに変換されるため、IN 句の要素数に制限があります。

于 2013-11-11T13:20:13.647 に答える