问题描述
我的控制器中有重复的foreach条件。如何简化呢? 因此,我几乎达到500行。我一直在x8的每个条件下使用它。
List<jewelry_dashboard_view_per_month> transactionmonthlynewloan = dashboardmanager.Get_MonthlyTransaction(search_branch,(monthlyonly + "01"),"N-",(monthlyonly + no_of_items),no_of_items,monthlyonly);
myNewLoanMontlyList.Add(transactionmonthlynewloan);
List<jewelry_dashboard_view_per_month> transactionmonthlyrenewal = dashboardmanager.Get_MonthlyTransaction(search_branch,"R-",monthlyonly);
myRenewalMontlyList.Add(transactionmonthlyrenewal);
这是if条件
if (myNewLoanMontlyList[0].Count != 0)
{
foreach (var internal_monthly_newloan_data in myNewLoanMontlyList[0].SelectMany(c => c.id_data))
{monthly_newloan_data_ID.Add(internal_monthly_newloan_data);}
foreach (var internal_monthly_newloan_data in myNewLoanMontlyList[0].SelectMany(c => c.debit_data))
{monthly_newloan_data_debit.Add(internal_monthly_newloan_data);}
}
else
{
monthly_newloan_data_ID.Add(0);
monthly_newloan_data_debit.Add(0);
};
这是foreach条件
//newloan
int newloan_data_id = 0;
DateTime newloan_data_transdate = DateTime.Parse((DateTime.Today).ToString());
decimal newloan_data_debit = 0;
string newloan_data_txnname = "";
string newloan_data_branchID = "";
foreach (var newloan_data in newloan)
{
newloan_data_id = newloan_data.ID;
newloan_data_transdate = DateTime.Parse((newloan_data.Transdate).ToString());
newloan_data_debit = Decimal.Parse((newloan_data.Debit).ToString());
newloan_data_txnname = newloan_data.TransactionName;
newloan_data_branchID = newloan_data.BranchID;
};
datanewloan = new transaction_details()
{
ID = newloan_data_id,Transdate = DateTime.Parse(newloan_data_transdate.ToString("yyyy-MM-dd")),Debit = Decimal.Parse(newloan_data_debit.ToString()),TransactionName = newloan_data_txnname,BranchID = newloan_data_branchID
};
解决方法
您可以使用Linq
,
SelectMany:将序列的每个元素投影到
IEnumerable<T>
。您无需再次进行迭代并将其添加到单独的列表中
对于您的if情况,
if (myNewLoanMontlyList[0].Any())
{
monthly_newloan_data_ID = myNewLoanMontlyList[0].SelectMany(c => c.id_data);
monthly_newloan_data_debit = myNewLoanMontlyList[0].SelectMany(c => c.debit_data);
}
else
{
monthly_newloan_data_ID.Add(0);
monthly_newloan_data_debit.Add(0);
}
Select:将序列的每个元素投影为新形式。在你的 case新表单是
的实例transaction_details
使用Linq .Select()
代替for循环,
var result = newloan.Select(x => new transaction_details(){
ID = x.ID,Transdate = DateTime.Parse(x.Transdate.ToString("yyyy-MM-dd")),Debit = Decimal.Parse((x.Debit).ToString()),TransactionName = x.TransactionName,BranchID = x.BranchID
}).LastOrDefault();
要获取最后一个元素,我使用了LastOrDefault()
。您可以按索引或按条件获取单个元素。
在您的nginx: [emerg] "map" directive is not allowed here in /tmp/nginx-OMMITED
条件的情况下:
if-else
如果在方法中,if (myNewLoanMontlyList[0].Count != 0)
{
foreach (var internal_monthly_newloan_data in myNewLoanMontlyList[0].SelectMany(c => c.id_data))
{monthly_newloan_data_ID.Add(internal_monthly_newloan_data);}
foreach (var internal_monthly_newloan_data in myNewLoanMontlyList[0].SelectMany(c => c.debit_data))
{monthly_newloan_data_debit.Add(internal_monthly_newloan_data);}
}
else
{
monthly_newloan_data_ID.Add(0);
monthly_newloan_data_debit.Add(0);
};
之后没有其他过程,则只能使用if-else
条件,而没有if
部分。
else