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内存中的所有 s,只会加载它们的Recon.

您还可以使用IQueryable<Recon>并利用 EF 中的延迟执行:

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