如何在c#.net中简化if条件和foreach条件?

问题描述

我的控制器中有重复的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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...