LINQ

A linguagem da fórmula de cálculo personalizado é baseada em VB e pode ser estendida com LINQ. E possível gravar sua fórmula a qualquer momento no LINQ, se não for possível realizar os cálculos com as funções predefinidas.

Abaixo está uma lista de algumas expressões úteis do LINQ. Não é exaustiva. Consulte a documentação de LINQ do Microsoft Visual Basic para obter mais detalhes.

Links recomendados:

Filtro

O princípio dos filtros é filtrar uma determinada lista de itens de acordo com um predicado. Para aplicar o filtro, você precisa:

  • uma lista para filtrar

  • um predicado (função que, a partir de um item de lista, retorna um booleano)

O resultado é uma nova lista com alguns dos itens da lista de entrada.

O número de itens na lista nova é menor do que na lista de entrada.

Sintaxe:

  • InputList.Where(Function(x) predicate)

  • Where: para chamar o filtro

  • Function: para escrever um predicado

Exemplo:

CurrentSignal.AllPeaks.Where(Function(p) p.Peak_Area>1.2 e p.Peak_Height<1000) retorna uma lista de picos com uma área maior que 1,2 e altura inferior a 1000.

Você pode usar esta lista em uma fórmula para fazer a soma das áreas de todos os picos na lista:

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

Projeção

O princípio de projeção é criar uma lista a partir de uma determinada lista de itens transformando cada um. Para aplicar a projeção, você precisa:

  • Uma lista para transformar

  • Uma função de projeção (função que, a partir de um item de lista, retorna um novo item)

O resultado é uma nova lista com a mesma extensão que a lista de entrada. Os tipos de item podem ser diferentes!

Sintaxe:

  • InputList.Select(Function(x) projection)

  • Select: para chamar a transformação

  • Function: para escrever a função de projeção

Exemplo:

CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area) retorna uma lista de valores de Peak_Area a partir de uma lista de picos.

Você pode então fazer a soma: CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area).Sum()

Observe que isto equivale à função de Cálculo Personalizado predefinida, Sum(“Peak_Area”, CurrentSignal.AllPeaks).

Agregado

O princípio de agregação é computar um valor único a partir de uma lista. Para aplicar a agregação, você precisa:

  • InputList.Select(Function(x) projection)

  • Uma lista para agregar

  • Uma função de acumulação (função que junta o item atual e o agregado)

  • Um valor inicial para agregação

O resultado é um valor agregado único. O tipo de valor agregado pode ser diferente do tipo de item.

Sintaxe:

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

  • Aggregate: para chamar a agregação

  • Function: para escrever a função de acumulação

Exemplos:

(CurrentSignal.AllPeaks.Select(Function(p) p.Peak_Area)).Aggregate("", Function(acc,x) acc+" ; "&x) retorna a lista de todas as áreas de pico separadas com " ; ".

Observe que isso é equivalente a uma função de 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) retorna a soma das áreas de pico.

Observe que isso equivale à função de Cálculo Personalizado predefinida, Sum("Peak_Area", CurrentSignal.AllPeaks).