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:
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))
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).
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).