Acumatica foreach最佳实践

时间:2015-03-21 07:07:28

标签: acumatica

我想在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) {}

我不知道哪个更好。抱歉我的英文。

2 个答案:

答案 0 :(得分:2)

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

  1. 看起来更容易阅读和理解(第1行有查询,接下来是在带有特殊参数的数据库上执行)
  2. 此代码不分配List&lt; SOLine&GT;稍后我们不再需要的实例,它不会分配内存来保存所有行,因此只要求CLR只需要一行内存。

答案 1 :(得分:1)

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

我建议使用纯Select(..)的第一种方法,因为它更简洁并且做同样的事情。 FirstTableItems只会将结果集的项目转换为第一个项目的类型,并为您提供键入的可枚举项(在您的案例中为IEnumerable<SOLine>),但因为您foreach执行了{{1}}可以隐式完成项目转换 - 就像在第一个示例中一样。因此,最好使用更简单的选项。