2016-12-05 72 views
0

这里有两个表运行按比例分配,如何使用ASP.NET MVC 5和ASP.NET

amounttbl, amountId - amountValue 
requesttbl reqId - reqAmount - Rate - soldAmount, amountId 

数据:

amounttbl 
amountId | amountValue 
---------|------------ 
     1 | 5000 

requesttbl 
reqId | reqAmount | Rate | soldAmount | amountId 
------|-----------|------|------------|--------- 
     1|  2000| 12|   0|  1 
     2|  500| 12|   0|  1 
     3|  1000| 11|   0|  1 
     4|  500| 10|   0|  1 
     5|  1000| 10|   0|  1 

对于这一点,我已经准备应该卖出的动作金额5000,从高利率到低利率,这里它将从(1-2-3)总共卖出4500,它将保持500。现在它应该分配为(4 & 5)。首先,它应该做它:

4--一千五分之五百= 0.33和5 - 1000/1500 = 0.66

4将获得的500和5%的0.33将获得500 0.66%。

为此,我已经创建了一个动作,但它也存在一些问题:

id = 1; 
amount = 5000; 
var requests = db.request.Where(a => a.amountId== id).OrderBy(a => a.Rate); 
foreach(var item in requests) 
{ 
    decimal soldamount = db.request.Where(a => a.amountId== id).Sum(a => a.reqAmount); 
    decimal available= amount - soldamount ; 
    while (available>= item.reqAmount) 
    { 
     item.soldAmount= item.reqAmount; 
    } 
} 
db.SaveChanges(); 

在这里,我面临两个问题,一是foreach内:

已经有一个与此命令关联的打开的DataReader,它必须首先关闭 。

这是因为:

小数soldamount = db.request.Where(A => a.amountId == ID).SUM(A => a.reqAmount);

而且我不知道如何计算记录4,5,并设置自己的本分。

+0

我不认为你表现出对第二个表正确的数据。 – TheVillageIdiot

回答

0

好了,坦率地说我没有得到你的算法中,但作为open DataReader问题试试这个代码:

id = 1; 
amount = 5000; 

//Get list of objects from db (assuming db is `DbContext` and request is `IDbSet` stuff) 
var requests = db.request.Where(a => a.amountId== id).OrderBy(a => a.Rate).ToList(); 

//we already have requests with amountId == id in *requests* variable above. 
//db.request.Where(a => a.amountId== id).Sum(a => a.reqAmount); 

//This does not change during loop, so calculate before hand 
var soldamount = requests.Sum(a => a.reqAmount); 

decimal available = amount - soldamount; 

foreach(var item in requests) 
{ 
    //don't get concept of while here as you are not changing either 
    //item.reqAmount not available 
    if(available>= item.reqAmount) 
    { 
     item.soldAmount= item.reqAmount; 
    } 
} 
db.SaveChanges(); 
+0

这里,当我运行foreach它会改变(item.soldAmount)与id(amountId)的所有记录,即使总金额更多的公布的金额,因为,var request = db.request.where ..... ... out of the foreach,但如果保持在foreach中,我会得到错误datareader –

+0

什么是db和request? EntityFramework的东西或'DataReader'或'DataSet'等? – TheVillageIdiot

+0

request = db.request它的表 –