Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问以前从每个数据库返回的值?_C#_Excel_Lambda_Powerquery_M - Fatal编程技术网

C# 访问以前从每个数据库返回的值?

C# 访问以前从每个数据库返回的值?,c#,excel,lambda,powerquery,m,C#,Excel,Lambda,Powerquery,M,在C#中,我可以这样写: int?valueForNewColumeInPreviousRecord=null; myTable.AddColumn(“新列名”,(记录)=>{ int NEWCROMEVALUE; newColumeValue=valueForNewColumeInPreviousRecord.HasValue? NewColumeInPreviousRecord的值。值+记录。其他值: 记录.SomeOtherValue; valueForNewColumeInPreviou

在C#中,我可以这样写:

int?valueForNewColumeInPreviousRecord=null;
myTable.AddColumn(“新列名”,(记录)=>{
int NEWCROMEVALUE;
newColumeValue=valueForNewColumeInPreviousRecord.HasValue?
NewColumeInPreviousRecord的值。值+记录。其他值:
记录.SomeOtherValue;
valueForNewColumeInPreviousRecord=newColumeValue;
返回newColumeValue;
} + 42);
注意:
+42
部分,这使得无法从表中的任何记录读取/获取/访问最后返回的值

我将如何在Power Query中执行此操作? 还是有一种完全不同的方式来做这类事情

我对向表中实际添加一个新列不感兴趣,但对从lambda/each访问以前返回/计算的数据的实际概念,以及如果可能,如何将数据存储在变量中感兴趣


“表格”只是一个很好的具体示例,您可能希望执行类似的操作。

我不是肯定的,但这看起来与函数类似,并允许您执行


这与循环非常相似,在循环中,您在遍历列表时初始化和更新值。

我不是肯定的,但这看起来非常类似于函数所喜欢并允许您执行的操作


这与循环非常相似,在循环中,您可以在列表中迭代时初始化和更新值。

您可以这样做,但使用大型表时速度非常慢。让我们通过一个运行的total示例来了解它

取一个名为“Source”的表,其中有一个“Values”列,其中包含要累加的数字

首先要做的是添加一个索引列

Indexed = Table.AddIndexColumn(Source, "Index"),
然后,在您的问题之后,添加了一个名为“RunTot”的新列。此新列的每个值将是此行的“值”加上上上一个运行总数(“RunTot”)的数字。诀窍是在这部分“@Output[RunTot]{[Index]-1}”之前的“@”符号,这样您就可以调用正在构造的列的前一个元素

“尝试…否则”只是一种避免向列表传递负索引时出现错误的方法

最后,“Table.Buffer”是一种加快速度的方法

Output = Table.Buffer(Table.AddColumn(Indexed, "RunTot", each [Values] + (try @Output[RunTot]{[Index]-1} otherwise 0)))
但正如Alexis所建议的,使用“List.Generat”方法要好得多。这是一个使用列表运行的total函数。生成:

fnListGenerateRunningTotal = (Input as list) as list => 
List.Generate( 
        ()=> [Total = Input{0}, Counter = 0],
        each [Counter] < List.Count(Input),
        each [Total = Input{Counter} + [Total], Counter = [Counter] + 1],
        each [Total]
    )
FNListGeneratorUnningTotal=(作为列表输入)作为列表=>
列表。生成(
()=>[Total=Input{0},Counter=0],
每个[计数器]<列表计数(输入),
每个[Total=输入{Counter}+[Total],计数器=[Counter]+1],
每个[总数]
)

您可以这样做,但使用大表的速度非常慢。让我们通过一个运行的total示例来了解它

取一个名为“Source”的表,其中有一个“Values”列,其中包含要累加的数字

首先要做的是添加一个索引列

Indexed = Table.AddIndexColumn(Source, "Index"),
然后,在您的问题之后,添加了一个名为“RunTot”的新列。此新列的每个值将是此行的“值”加上上上一个运行总数(“RunTot”)的数字。诀窍是在这部分“@Output[RunTot]{[Index]-1}”之前的“@”符号,这样您就可以调用正在构造的列的前一个元素

“尝试…否则”只是一种避免向列表传递负索引时出现错误的方法

最后,“Table.Buffer”是一种加快速度的方法

Output = Table.Buffer(Table.AddColumn(Indexed, "RunTot", each [Values] + (try @Output[RunTot]{[Index]-1} otherwise 0)))
但正如Alexis所建议的,使用“List.Generat”方法要好得多。这是一个使用列表运行的total函数。生成:

fnListGenerateRunningTotal = (Input as list) as list => 
List.Generate( 
        ()=> [Total = Input{0}, Counter = 0],
        each [Counter] < List.Count(Input),
        each [Total = Input{Counter} + [Total], Counter = [Counter] + 1],
        each [Total]
    )
FNListGeneratorUnningTotal=(作为列表输入)作为列表=>
列表。生成(
()=>[Total=Input{0},Counter=0],
每个[计数器]<列表计数(输入),
每个[Total=输入{Counter}+[Total],计数器=[Counter]+1],
每个[总数]
)

那么,您如何访问/使用调用列表的前一个结果。在当前调用中累加?假设您正在调用Table.AddColumn,其中第三个参数是一个函数,它应该返回当前记录的已添加列的值。对于以前对以前记录的调用,对该函数的每次调用都是无状态的,您得到的只是作为参数的当前记录。因此,列表函数在这里不能真正使用,您需要一种方法来存储和访问函数的最后一个结果。那么,您如何访问/使用调用列表的前一个结果。在当前调用中累加?假设您正在调用Table.AddColumn,其中,第三个参数是一个函数,该函数应返回当前记录的已添加列的值。对于以前对以前记录的调用,对该函数的每次调用都是无状态的,您得到的只是作为参数的当前记录。所以这里不能真正使用列表函数,你需要一个方法来存储和访问函数的最后结果。我想你错过了这一部分“我对向表中实际添加一个新列不感兴趣,但对从lambda/each访问以前返回/计算的数据的实际概念,以及如果可能,如何将数据存储在变量中”这是Ben Gribaudo博客的一段摘录:“为了让表达式引用分配给它的标识符,只需在引用前面加一个@。在我的示例中,我使用了“@Output[RunTot]{[Index]-1}”。表“Output”的定义包含对表本身的(自)引用,实际上是对新列“RunTot”的引用“您正在使用Table.AddColumn函数创建。通过这种方式,您可以使用索引访问以前返回的值。我用了一张桌子,但同样的可以是ap