2012-02-01 73 views
1

我有一个列表(mainlist)具有以下LINQ传递值对于每次迭代

PSID Nominprsn


1詹姆斯 2特洛伊 3佛瑞德

有一个存储过程在那里我传入PSID和Nominprsn的值并返回结果。

var spresult = sp_getval(PSID, Nominprsn); 

我不知道如何通过列表,并为每个列表传递值存储到该给定记录的proc值。

输出将

PSID Nominprsn spresult


1詹姆斯3 2特洛伊4 3弗雷德2

我知道我可以这样做

var listv = (from ml in mainlist 
       select ml).ToList(); 

但不知道如何拨打电话sp_getval为每次迭代,因为我需要通过 PsID和Nominprsn的值并将其传递给sp_getval。

回答

1

我不是100%肯定你问什么 - 但如果我跟着,你说,你想在你的列表中调用存储过程你在你的列表项的结果,每个条目映射?

如果这是你可以做这样的事情的情况下:

var results = mainList.Select(item => sp_getval(item.PSID, item.Nominprsn)) 

编辑:我刚才重读你的问题,看看你想要的输出,在这种情况下,我应该这样做:

var results = mainList.Select(item => new { 
              spResult: sp_getval(item.PSID, item.Nominprsn), 
              PSID: item.PSID, 
              Nominprsn: item.Nominprsn 
              }); 

这会将列表中的每个条目映射到具有三个成员的新匿名类型:列表对象中的原始两个字段以及包含SP调用结果的新spResult字段。

+0

- 我还有一个问题 - spResult是一个列表,并从该列表中,我需要获得第二行。此外,我需要获得名为PSDate的列。 PS的值是spResult。关于如何做到这一点的任何想法 – 2012-02-01 15:52:06

+0

您可以在sp_getval(args)调用中嵌套更多的LINQ,但这会很快变得麻烦 - 根据究竟发生了什么,我可能会更改sproc(或创建一个新的)返回你需要的东西,或者将sproc调用包装在另一个函数中,该函数从结果中提取你需要的东西,然后在上面的LINQ中调用新创建的函数,将“item”传递给它(所以spResult:myNewFunc(item) ,其中myNewFunc带一个列表项,调用存储过程,并对需要的结果进行任何操作) – acoffman 2012-02-01 15:57:00