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 行有一个查询,接下来它使用特殊参数在数据库上执行)
- 此代码不会分配我们以后不再需要的 List
实例,也不会分配内存来保留所有行,因此只向 CLR 请求与单行一样多的内存
我想 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 行有一个查询,接下来它使用特殊参数在数据库上执行)
- 此代码不会分配我们以后不再需要的 List
实例,也不会分配内存来保留所有行,因此只向 CLR 请求与单行一样多的内存