這是我的業務層代碼 public void UpdateRecords() {
int resultCountries = 0
int resultState = 0
int resultDistrict = 0
int resultCity = 0
DataTable dt = dataAccess.GetRecords();
foreach(DataRow dr in dt.Rows)
{
int PersonId = Convert.ToInt32(dr["PersonId"].ToString());
resultCountries = dataAccess.UpdateCountries(PersonId);
if(resultCountries > 0)
{
dataAccess.UpdateMessage(personId,"Country Updated Successfully");
resultState = UpdateState(personId);
if(resultState > 0)
{
dataAccess.UpdateMessage(personId,"State Updated Successfully");
resultDistrict = UpdateDistrict(personId);
if(resultDistrict > 0)
{
dataAccess.UpdateMessage(personId,"District Updated Successfully");
resultCity = UpdateCity(personId);
if(resutlCity > 0)
{
dataAccess.UpdateMessage(personId,"City Updated Successfully");
continue;
}
else if(resutlCity == 0)
{
dataAccess.UpdateMessage(personId,"City Not Updated Successfully");
continue;
}
else
{
dataAccess.UpdateMessage(personId,"Some error occured while updating city...");
continue;
}
}
else if(resultDistrict == 0)
{
dataAccess.UpdateMessage(personId,"District not Updated Successfully");
continue;
}
else
{
dataAccess.UpdateMessage(personId,"Some error occured while updating district..");
continue;
}
}
else if(resultState == 0)
{
dataAccess.UpdateMessage(personId,"State not Updated Successfully");
continue;
}
else
{
dataAccess.UpdateMessage(personId,"Some error occured while updating state..");
continue;
}
}
else if(resultCountries == 0)
{
dataAccess.UpdateMessage(personId,"Country not Updated Successfully");
continue;
}
else
{
dataAccess.UpdateMessage(personId,"Some error occured");
continue;
}
}
}
從業務層,我正在呼叫資料訪問層方法,UpdateCountries,UpdateState,UpdateDistrict,UpdateCity,這些方法正在根據 person 表中的 personId 更新國家、州、地區、城市。
如果國家更新成功,則更新狀態,否則在資料庫中記錄錯誤并更新下一條記錄。州、區、市也是如此。但是這里有很多 if else 使用,請讓我知道如何替換代碼中的 if else。不想使用 switch case 或三元運算子,也不允許使用存盤程序。如果更新成功,資料訪問層方法回傳整數值 1,如果條件不滿足則回傳 0,如果錯誤則回傳 -1。
uj5u.com熱心網友回復:
僅用于學術興趣和好奇心
您可以使用委托串列
var list = new List<(string Name, Func<int, int> Callback)>()
{
("Country", dataAccess.UpdateCountries),
("State", dataAccess.UpdateState),
("District", dataAccess.UpdateDistrict),
("City", dataAccess.UpdateCity),
};
DataTable dt = dataAccess.GetRecords();
foreach (DataRow dr in dt.Rows)
{
var personId = Convert.ToInt32(dr["PersonId"].ToString());
foreach (var (name, callback) in list)
{
switch (callback(personId))
{
case > 0:
dataAccess.UpdateMessage(personId, $"{name} Updated Successfully");
continue;
case 0:
dataAccess.UpdateMessage(personId, $"{name} not Updated Successfully");
break;
default:
dataAccess.UpdateMessage(personId, "Some error occurred");
break;
}
break;
}
}
然而
您應該在一次請求和一次到資料庫的往返中完成這一切,因此應該重新考慮和重構這個問題。
uj5u.com熱心網友回復:
由于您似乎正在使用更新程序的結果來確定是否處理下一個依賴項并更改指示訊息的措辭,那么也許您可以使用Dictionary
例如以下內容:
var messageDictionary = new Dictionary<int, string>()
{
{ 1, "Updated Successfully" },
{ 0, "Not updated successfully"},
{-1, "Some error occurred while updating "}
};
然后作為第一遍,您的if..else...邏輯將變為:
int PersonId = Convert.ToInt32(dr["PersonId"].ToString());
var result = dataAccess.UpdateCountries(PersonId);
dataAccess.UpdateMessage(personId, $"Country {messageDictionary[result]}");
if (result > 0)
{
result = UpdateState(personId);
dataAccess.UpdateMessage(personId, $"State {messageDictionary[result]}");
if (result >0)
{
result = UpdateDistrict(personId);
dataAccess.UpdateMessage(personId, $"District {messageDictionary[result]}");
if (result > 0)
{
result = UpdateCity(personId);
dataAccess.UpdateMessage(personId, $"City {messageDictionary[result]}");
}
}
}
如果您實施了@TheGeneral 的建議,那么您將擁有:
foreach (DataRow dr in dt.Rows)
{
var personId = Convert.ToInt32(dr["PersonId"].ToString());
foreach (var (name, callback) in list)
{
var result = callback(personId);
dataAccess.UpdateMessage(personId, $"{name} {messageDictionary[result]}");
if(result!=1) break;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/342445.html
