Asp.net (自定义类的)列表似乎自行重置 代码:

Asp.net (自定义类的)列表似乎自行重置 代码:,asp.net,asp.net-mvc,vb.net,Asp.net,Asp.net Mvc,Vb.net,我有一个类,Pricing.vb,它在它的新方法中接受一个IEnumerable(属于tblAccount),其中tblAccount是一个实体框架类,添加了一个添加了非映射属性的分部类 Pricing.vb: Public Property accounts As IEnumerable(Of tblAccount) Public Sub New(ByVal accts As IEnumerable(Of tblAccount)) Me.accounts = accts End Su

我有一个类,
Pricing.vb
,它在它的新方法中接受一个
IEnumerable(属于tblAccount)
,其中
tblAccount
是一个实体框架类,添加了一个添加了非映射属性的分部类

Pricing.vb:

Public Property accounts As IEnumerable(Of tblAccount)

Public Sub New(ByVal accts As IEnumerable(Of tblAccount))
    Me.accounts = accts
End Sub
tblAccount.vb:

Partial Public Class tblAccount
    <NotMapped>
    Public Property irr As Double
End Class
基本上,
CalcBalance()
方法设计用于从其属性
Me.Accounts
中逐个删除
tblAccount
对象,按照最低内部收益率的顺序,直到剩余账户(
Me.netIRR
)的内部收益率满足最低标准(
Me.minimumIRR
)。
Me.netIRR
属性是通过方法
FillCashFlows()
FillMetrics()
计算的

问题: 不过,我看到的问题是,
Me.accounts
实际上每次do while…循环时都会重置自身。因此,如果我有
tblAccounts
acct\u id
s1到5,假设最低IRR的顺序是1、2、3、4和5,那么该方法第一次循环时将正确地从
Me.accounts
中删除
acct\u id=1
。但是,下次循环时,
acct\u id=1
将重新出现在
Me.accounts
中,并将删除
acct\u id=2
。它将继续这个奇怪的过程,直到它遇到索引超出范围的异常为止

对于一个小的可视化,下面是
IEnumerable(tblAccount的)
在每个循环之后的
acct\u id
的样子: 第一次循环后:

2
3
4
5
2
3
4
5
第二次循环后:

1
3
4
5
3
4
5
第三次循环后:

1
2
4
5
4
5
第四圈之后:

1
2
3
5
5
第五圈之后:

1
2
3
4
empty, and Exit Sub
应该是这样的: 第一次循环后:

2
3
4
5
2
3
4
5
第二次循环后:

1
3
4
5
3
4
5
第三次循环后:

1
2
4
5
4
5
第四圈之后:

1
2
3
5
5
第五圈之后:

1
2
3
4
empty, and Exit Sub

这是因为您使用的是
IEnumerable
,而不是
List
。LINQ查询是延迟加载的,因此您的
accounts
属性存储查询信息(如何获得结果)而不是帐户列表。在
Do/While
的每一次迭代中,您只需更改定义,然后就可以对初始数据源一次又一次地调用它

无论何时分配给
帐户
,请确保调用
ToList

Public Sub New(ByVal accts As IEnumerable(Of tblAccount))
    Me.accounts = accts.ToList()
End Sub

Public Sub-CalcBalance(要求价格为双倍)
Dim acctsByIRR As列表(长)
长=0时的尺寸i
Me.填写现金流(需求价格)
Me.FillMetrics()
acctsByIRR=Me.accounts.OrderBy(函数(t)t.irr)。选择(函数(t)t.acct\u id)。ToList()
“做。。。而这将按最低光线逐1删除帐户,直到其超过最小值
当我做的时候。netIRR
Me.FillCashFlows(reqPrice)和
Me.FillMetrics()做什么?这是重新填充项目吗?它们用每个账户的现金流填充其他类别属性,然后计算每个账户和整个账户的收益率/内部收益率等指标。他们不会重新填充我的帐户我的天。。。两个小时的头撞在墙上,答案就在那里。实际上,我开始将所有内容转换为列表,但后来由于某种原因停止了。非常感谢你。