0

長さ > 3000の整数配列int[] idsがあります。データベース テーブルから上位 15 レコードを の順序で取得したいと考えていますArray.IndexOf(ids, recordId)

私がやっている:

IQueryable<Record> records = from p in db.Records.Where(p => ids.Contains(p.Id)) 
                             select p;
records = records.ToList()
          .OrderBy(p => Array.IndexOf(ids, p.Id)).AsQueryable().Take(15);

これは非常に非効率的です。3000 を超えるレコードがメモリに読み込まれるのに、必要なのは 15 レコードだけだからです。

問題を解決する方法はありますか?ありがとうございました。

いくつかの既存の投稿:

LINQ を使用してカスタム/事前定義された順序で EF データ モデルからレコードを読み込む

配列をEFクエリに結合

4

1 に答える 1

2

あなたはそれを好転させることができます。

  1. 配列から ID を選択します
  2. 本当に必要なレコードだけを取得する
  3. 取得したレコードを ID の選択/順序に投影します。

このような:

100 個のアルバム ID のリストがあるとします。これらの ID のうち 15 個を、たとえば降順で取得します。

var ids = Enumerable.Range(1, 100);
var subsetOfIds = ids.OrderByDescending(i => i).Take(15);
var dbresults = Albums.Where(a => subsetOfIds.Contains(a.AlbumId)).ToArray();
var results = subsetOfIds.Select(id => new { IdFromArray = id, record = dbresults.First(album => album.AlbumId == id) }).ToArray();

これで、データベースから 15 個のレコードを取得しただけで、必要な順序に戻っています。

于 2013-06-27T02:00:32.810 に答える