LINQ

自定义计算公式语言基于 VB,可通过 LINQ 进行扩展。如果无法使用预定义函数进行计算,可随时使用 LINQ 编写公式。

以下是一些有用的 LINQ 表达式。该列表并不详尽。更多详细信息请参见 Microsoft Visual Basic LINQ 文档。

建议的链接:

筛选

筛选的原理是根据断言筛选给定的项目列表。要应用筛选,需要:

  • 要筛选的列表

  • 断言(获取列表项并返回布尔值的函数)

结果是包含输入列表中部分项目的新列表。

新列表中的项目数少于输入列表。

语法:

  • InputList.Where(Function(x) predicate)

  • Where:调用筛选

  • Function:编写断言

示例:

CurrentSignal.AllPeaks.Where(Function(p) p.Peak_Area>1.2 and p.Peak_Height<1000) 将返回面积大于 1.2 且高度低于 1000 的峰的列表。

您可以使用该公式中的列表来对列表中的所有峰的面积进行加和:

Sum("Peak_Area", CurrentSignal.AllPeaks.Where(Function(p) p.Peak_Area>1.2 And p.Peak_Height<1000))

投射

投射的原理是通过转换每个项目从给定的项目列表创建列表。要应用投射,需要:

  • 要转换的列表

  • 投射函数(获取列表项并返回新项的函数)

结果是与输入列表长度相同的新列表。项目类型可以是不同的!

语法:

  • InputList.Select(Function(x) projection)

  • Select:调用转换

  • Function:写入投射函数

示例:

CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area) 将从峰列表返回 Peak_Area 值列表。

之后可以进行加和:CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area).Sum()

注意,这与预定义的自定义计算函数 Sum(“Peak_Area”, CurrentSignal.AllPeaks) 是一样的。

集合

集合的原理是从列表计算单个值。要应用集合,需要:

  • InputList.Select(Function(x) projection)

  • 要集合的列表

  • 集合函数(获取集合和当前项目的函数)

  • 集合初始值

结果是唯一的集合值。集合值的类型可能与项目类型不同。

语法:

  • InputList.Aggregate(initial value,Function(acc,x) accumulation)

  • Aggregate:调用集合

  • Function:写入集合函数

示例:

(CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area)).Aggregate(””, Function(acc,x) acc+” ; “&x) 返回由 " ; " 分隔的所有峰面积的列表。

注意,这与以下 VB 函数是一样的:string.join(" ; " ,CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area))

(CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area)).Aggregate(0.0, Function(acc,x) acc+x) 将返回峰面积加和。

注意,这与预定义的自定义计算函数 Sum("Peak_Area", CurrentSignal.AllPeaks) 是一样的。