3

Reconリストからアイテムをフィルタリングしたい。リストに「13」に等しいプロパティReconを持つオブジェクトを持つすべてのオブジェクトを取得したいと考えています。TransactionSrcObjTypeTransactions

// The model is like this 

public partial class Recon
{

  public int ReconNum { get; set; }
  public virtual ICollection<Transaction> Transactions { get; set; }
}

public partial class Transaction
{
  public long TransactionId { get; set; }
  public Nullable<System.DateTime> DocumentDate { get; set; }
  public string SrcObjTyp { get; set; }
  public virtual Recon Recon { get; set; }
}

// this works for a few items but crashes on large data sets (million rows large)

List<Recon> reconsWithType13Trans = new List<Recon>();
db.Transactions.Where(t => t.SrcObjTyp == "13")
  .ToList().ForEach(t => reconsWithType13Trans.Add(t.Recon));

foreach が大量のメモリを消費していると、プログラムがメモリ不足の例外を発生させると思います。

私の質問は、これらのアイテムをできるだけ効率的にフィルタリングするにはどうすればよいかということです。可能であれば、多くのメモリを必要とせずに。この種のフィルタリングを実現するために foreach を使用しない別の可能性はありますか?

4

1 に答える 1

1

これを試して:

List<Recon> reconsWithType13Trans = db.Transactions
                     .Where(t => t.SrcObjTyp == "13")
                     .Select(t => t.Recon).ToList();

Transactionこれはメモリ内のすべての をロードするのではなく、それらのRecon.

IQueryable<Recon>を使用して、EF での遅延実行を利用することもできます。

var reconsWithType13Trans = db.Transactions
                     .Where(t => t.SrcObjTyp == "13")
                     .Select(t => t.Recon);
于 2013-10-03T08:22:34.663 に答える