Acumatica foreach 最佳实践

Acumatica foreach best practice

我想 foreach SOLine 中的项目。我应该使用

PXSelectBase<SOLine> lines = new PXSelect<SOLine, Where<SOLine.orderNbr,Equal<Required<SOLine.orderNbr>>>>(graph);

foreach (SOLine item in lines.Select(order.OrderNbr)) {}

List<SOLine> lines  = PXSelect<SOLine, Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>>>.Select(graph, order.OrderNbr).FirstTableItems.ToList();

foreach (SOLine item in lines) {}

我不知道哪个更好。对不起我的英语。

您的示例中显示的两种方法之间没有任何重要区别,除了带有 FirstTableItems 的方法会让您执行一些额外的步骤 - 至少调用此 属性 本身.

我建议将第一种方法与 pure Select(..) 一起使用,因为它更简洁并且做同样的事情。 FirstTableItems 只会将结果集中的项目转换为第一个项目的类型,并为您提供类型化的可枚举(在您的情况下为 IEnumerable<SOLine>),但是因为您对 foreach项目投射可以隐式完成 - 就像你的第一个例子一样。所以,最好使用更简单的选项。

我更喜欢第一个样本,但主要是出于美学原因:

  1. 看起来更容易阅读和理解(第 1 行有一个查询,接下来它使用特殊参数在数据库上执行)
  2. 此代码不会分配我们以后不再需要的 List 实例,也不会分配内存来保留所有行,因此只向 CLR 请求与单行一样多的内存